JavaScript:从二维数组(标题,行)创建键值数据结构

时间:2019-09-22 15:11:41

标签: javascript arrays key-value

我对JavaScript完全陌生,并且正在学校学习初学者水平的课程。

我有一个作业,其中要求我们创建一个函数,该函数将列标题用作键,将数据用作每一行的值,从而将2D数组转换为字典。

我想我知道如何将第一行(用作标题)和其余的行(用作行)分开,但是在将其转换为字典时遇到麻烦。

这是我到目前为止所写的内容:

function rowsToObjects(data) {
    var headers = data[1];
    data.shift();
    //var rows = alert(data);
    var rows = alert(data.slice(1));
}

这是输出的示例:

const headers = ['a', 'b', 'c'];//Should not be hardcoded - subject to change depending on the grader
const rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];//Should not be hardcoded - subject to change depending on the grader
const result = rowsToObjects({headers, rows}) 
console.log(result);
// [{a: 1, b: 2, c: 3}, {a: 4, b: 5, c: 6}, {a: 7, b: 8, c: 9}];

如果可以使用for循环,我会知道如何为每行创建一个字典,但是我们不允许使用while循环,for循环,for ... in循环,for ... of循环, forEach方法,所以我在想办法做到这一点,并使我的输出看起来像示例中显示的那样。

欢迎任何帮助,非常感谢!

3 个答案:

答案 0 :(得分:1)

您可以在Array.prototype.reduce数组上使用rows来迭代rows二维数组中的每个数组。

然后,通过使用Array.prototype.reduce使用索引来映射headers中与rows数组的每个数组值相对应的i中的值,为2-D数组中的每个数组创建一个临时对象const headers = ['a', 'b', 'c']; const rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; const result = rowsToObjects(headers, rows) console.log(result); // [{a: 1, b: 2, c: 3}, {a: 4, b: 5, c: 6}, {a: 7, b: 8, c: 9}]; function rowsToObjects(headers, rows){ return rows.reduce((acc, e, idx) => { acc.push(headers.reduce((r, h, i)=> {r[h] = e[i]; return r; }, {})) return acc; }, []); }

int main(int argc, char **argv){

    struct argnum{
        int rank;
        char fileNamne[10];
    };

    void** argtab= malloc(sizeof(struct argnum)*(argc-1));

    for(int i=0; i<argc-1; i++){
        argtab[i]->rank=i;
        argtab[i]->filename=argv[i];
    }
}

答案 1 :(得分:0)

您可以使用Array.reduce遍历所有数组并将它们简化为对象。

function arrayToObjects(rows){
  const headers = rows.shift();//shift headers out of rows
  return rows.map(rowsToObjects);
  function rowsToObjects(row) {
    return  row.reduce((obj,e,i)=>{
      obj[headers[i]]=e;
      return obj;
    },{})
  }
}
console.log(arrayToObjects([['a', 'b', 'c'],[1, 2, 3], [4, 5, 6], [7, 8, 9]]));
 

答案 2 :(得分:0)

使用map遍历行,然后使用reduce将行(c)中的每个单元格(r)与使用索引({{ 1}})。

这里是一种单线的说法:

i