首页 > 解决方案 > 如何使用嵌套数组在javascript中形成对象,使用第一个数组作为对象,数组的其余部分作为值

问题描述

我得到了一个这样的数组:

data = [
  ['first_name', 'second_name', 'sex'],
  ['Jacob', 'David', 'M'],
  ['Kathryn', 'Gardener', 'F'],
  ['Jamaal', 'Dave', 'Unknown']
].

解决方案是将数组作为看起来像这样的对象返回:

[
  { first_name: "Jacob", second_name: "David", sex: "M" },
  { first_name: "Kathryn", second_name: "Gardener", sex: "F" }
  {....}
];

我写了以下代码:

var object = {};
var arrays = [];
for (i = 0; i < data.length; i++){
   for (var j = i; j < data.length; j++){
       var keys = data[0][i];
       var values = data [j][i];
       object[keys] = values;
   }
   arrays.push(object);
};

但我的输出是:

[
   { 
      first_name :'Jamaal',
      second_name : 'Dave',
      sex : 'unknown'
   },
   { 
      first_name :'Jamaal',
      second_name : 'Dave',
      sex : 'unknown'
   },
   {
      first_name :'Jamaal',
      second_name : 'Dave',
       sex : 'unknown'
   },
   {
      first_name :'Jamaal',
      second_name : 'Dave',
      sex : 'unknown'
    }
];

我也尝试了几种方法,要么我最终只能创建一个对象......

标签: javascript

解决方案


您需要在第一个循环中使用新对象(引用),否则您会为每一行获得相同的对象。

var data = [ ['first_name', 'second_name', 'sex'], ['Jacob', 'David', 'M'], ['Kathryn', 'Gardener', 'F'], ['Jamaal', 'Dave', 'Unknown']],
    result = [],
    i, j,
    object;

for (i = 0; i < data.length; i++) {
    object = {};                           // take a new object
    for (j = 0; j < data[i].length; j++) { // start from zero
        object[data[0][j]] = data[i][j];   // use j as last key
    }
    result.push(object);
}

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

一个更短的方法Object.fromEntries

const
    getObjects = ([header, ...data]) => data.map(values =>
        Object.fromEntries(values.map((value, index) => [header[index], value])));

var data = [['first_name', 'second_name', 'sex'], ['Jacob', 'David', 'M'], ['Kathryn', 'Gardener', 'F'], ['Jamaal', 'Dave', 'Unknown']],
    result = getObjects(data);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读