如何为所有列拆分每列的数组? (JavaScript的)

时间:2018-02-21 20:59:21

标签: javascript arrays algorithm arraylist

Hello JavaScript同行,

我有一个数组是根据csv文件中的数据创建的,如下所示:

array from CSV file

例如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);

这是它吐出的数组。

array

如何为此数组中的所有列执行此操作?

可能使用类似vm.dataPerColumn = [{column1: [...], column2: [...], etc...]

的结构

2 个答案:

答案 0 :(得分:3)

Reduce数组,forEach子数组检查密钥是否存在,如果没有,则在结果对象(r)上创建密钥。将当前项目按到键:

&#13;
&#13;
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;
&#13;
&#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等,但是当你已经拥有一个数组时,它确实没有意义,所以我把标题名称和相应的列放在一起,然后你可以直接引用它

我所做的是分隔标题和数据。所以你不必担心第一行,

然后我将行转换为列,然后您可以浏览标题并将列数组添加到每个标题中。