2017-05-25 100 views
1

我正在循环将数组的数组转换为对象,我使用逗号“”分割,但如果我的值有一些逗号,它也会被分割。例如:如果我的价值有一个日期2017年5月2日它实际上是一个单一的价值,但它是分裂为5月2日作为一个值和2017作为另一个值,所以,我的整个目标变得越来越.need帮助Array of Array to Json

我我正在阅读excel表格。我的输出是数组的数组。我需要将其转换为json对象。

var xls = require('excel'); 
describe('TransactionDetails-Excel', function() {  
    it('External Type G Tranasaction Details validation', function (done) { 
     xls('transactions.xlsx', function(err, data) { 
      if(err){ 
       throw err; 
      } 
      else{ 
       console.log(data); 
       console.log(JSON.stringify(convertToJSON(data))); 
       done(); 
      } 
     }); 
    function convertToJSON(array) { 
     var first = array[0].join(); 
     var headers = first.split(','); 
     var jsonData = []; 
     for (var iterator_i = 1, length = array.length; iterator_i < length; iterator_i++){ 
      var myRow = array[iterator_i].join(); 
      var row = myRow.split(','); 
      var data = {}; 
      for (var x = 0; x < row.length; x++){ 
       data[headers[x]] = row[x]; 
      } 
      jsonData.push(data); 
     } 
     return jsonData; 
    } 
}); 
}); 

Excel表:transactions.xlsx click here to view screenshot of excel sheet

输出:数据

[ [ 'Transaction Id', 'Paid ', 'Time Created' ], 
    [ '0YC0', 
    'Joe\'s Generic Business \[email protected]', 
    'Mar 2, 2012 14:28:36 PST' ], 
    [ '8uyhr', '[email protected]', 'May 2, 2015 15:20:20 PST' ], 
    [ '786YUH', '[email protected]', 'May 18, 2017 13:20:30 PST' ] ] 

输出://这是我所得到的

[{"Transaction Id":"0YC0","Paid ":"Joe's Generic Business \[email protected]","Time Created":"Mar 2","undefined":" 2012 14:28:36 PST"}, 
{"Transaction Id":"8uyhr","Paid ":"[email protected]","Time Created":"May 2","undefined":" 2015 15:20:20 PST"},  
{"Transaction Id":"786YUH","Paid ":"[email protected]","Time Created":"May 18","undefined":" 2017 13:20:30 PST"}] 

但最终目标应该是:

[{"Transaction Id":"0YC0","Paid ":"Joe's Generic Business \[email protected]","Time Created":"Mar 2, 2012 14:28:36 PST"}, 
    {"Transaction Id":"8uyhr","Paid ":"[email protected]","Time Created":"May 2, 2015 15:20:20 PST"},  
    {"Transaction Id":"786YUH","Paid ":"[email protected]","Time Created":"May 18, 2017 13:20:30 PST"}] 

在此先感谢。

+0

看到这个https://stackoverflow.com/questions/22917269/javascript-convert-two-dimensional-array -to-array-of-objects-using-the-first-r – barbsan

+0

为什么使用'join()'然后是'split()'。在join之前直接使用数组,它会正常工作。 –

回答

0

加入一些自定义的值,然后分裂

var myRow = array[iterator_i].join(';'); 
var row = myRow.split(';'); 
+0

工程正常。但突然间我得到这个错误。 “Uncaught TypeError:无法读取未定义的属性”连接“。 – Anjanaa

+0

错误本身明确,数据中存在一些空值或空值。尝试添加“尝试”“catch”并查看发生此错误的时间。我相信只是一些数据问题。 –

1

使用此功能insted的

替换此
function convertToJSON(array) { 
    var objArray = []; 
    for (var i = 1; i < array.length; i++) { 
    objArray[i - 1] = {}; 
    for (var k = 0; k < array[0].length && k < array[i].length; k++) { 
     var key = array[0][k]; 
     objArray[i - 1][key] = array[i][k] 
    } 
    } 

    return objArray; 
} 
0

您可以通过拆分出来的标签和数据很容易地做到这一点,并执行以下操作:

var labels = data[0] 
var output = data.slice(1).map(item => item.reduce((obj, val, index) => { 
    obj[labels[index]] = val 
    return obj 
}, {})) 

此作品由map将数组中的每个项目添加到新数组中。对每个项目进行reduce将数据值转换为具有正确键的对象。

小提琴here

0

你可以试试这个也是.....

let keys = array.shift(); 
let arrayofObjects = array.map(subArray => _.object(keys,subArray)); 
console.log(arrayofObjects);