Hello JavaScript同行,
我有一个数组是根据csv文件中的数据创建的,如下所示:
例如array [0]的每个数组索引是在这种情况下有87个的头。该数组中的每个其他数组都是行。
我需要获取该数据并在列之间拆分
以下代码仅用于第一列:
var specialCounter = 0;
for(var j = 1; j<vm.lines.length; j++){
vm.columns.push(vm.lines[j][0]);
if(specialCounter >= vm.lines[j][0].length)
specialCounter = 0;
else
specialCounter++;
}
vm.columnData.columnData= vm.columns;
console.log(vm.columnData);
这是它吐出的数组。
如何为此数组中的所有列执行此操作?
可能使用类似vm.dataPerColumn = [{column1: [...], column2: [...], etc...]
答案 0 :(得分:3)
Reduce数组,forEach子数组检查密钥是否存在,如果没有,则在结果对象(r
)上创建密钥。将当前项目按到键:
var arr = [['h1', 1, 2, 3], ['h2', 4 , 5 , 6], ['h3', 7, 8, 9]];
var result = arr.reduce(function(r, a) {
a.forEach(function(s, i) {
var key = i === 0 ? 'headers' : 'column' + i;
r[key] || (r[key] = []); // if key not found on result object, add the key with empty array as the value
r[key].push(s);
});
return r;
}, {});
console.log(result);
&#13;
答案 1 :(得分:1)
通过阅读说明并查看图片,标题似乎在array[0]
const vm = {};
vm.lines = [["$", "house", "car"],[5, 10, 15],[25,35,45]];
const headers = vm.lines[0];
const data = vm.lines.slice(1);
const columns = data.reduce((newColumns, row) => {
for(let i=0;i<row.length;i++){
if(newColumns.length-1 < i){ //first column;
newColumns.push([]);
}
newColumns[i].push(row[i]);
}
return newColumns;
}, []);
const columnsWithHeaders = headers.map((header, index) => ({[header]:columns[index]}));
console.log(columnsWithHeaders);
你请求了column1,column2等,但是当你已经拥有一个数组时,它确实没有意义,所以我把标题名称和相应的列放在一起,然后你可以直接引用它
我所做的是分隔标题和数据。所以你不必担心第一行,
然后我将行转换为列,然后您可以浏览标题并将列数组添加到每个标题中。