输出中的数组到对象列表(没有额外数组)的数组

时间:2017-02-20 06:11:13

标签: javascript arrays javascript-objects

使用Array of array to object - javascriptConvert an array to an array of objects作为指导我尝试编写一个导致的函数 获取这个数组列表数组:

var list = [['name', 'Sparky'], ['breed', 'lab'], ['age', 4]];

并将其转换为:

{
  name : 'Sparky'
  breed : 'lab',
  age : 4
}

但是,当我运行以下代码时:



var list = [
  ['name', 'Sparky'],
  ['breed', 'lab'],
  ['age', 4]
];

function toObjects(data) {
  var keys = data.shift(),
    i = 0,
    k = 0,
    obj = null,
    output = [];

  for (i = 0; i < data.length; i++) {
    obj = {};

    for (k = 0; k < keys.length; k++) {
      obj[keys[k]] = data[i][k];
    }

    output.push(obj);
  }

  return output;
}
var data = [
  ['name', 'Sparky'],
  ['breed', 'lab'],
  ['age', 4]
];

console.log(toObjects(data))
&#13;
&#13;
&#13;

我明白了:

console.log(toObjects(data)); //=> 

[ { name: 'breed', Sparky: 'lab' },{ name: 'age', Sparky: 4 } ]

但是我需要输出没有额外的数组[]并且还要列出这样的单个文件:

       {
          name : 'Sparky'
          breed : 'lab',
          age : 4
        }

有什么建议吗?谢谢,麻烦您了!

2 个答案:

答案 0 :(得分:2)

我会使用Array.prototype.reduce来执行转换以及参数destructing。看一下,代码非常简单:)

let list = [
  ['name', 'Sparky'],
  ['breed', 'lab'],
  ['age', 4]
];

function toObjects(data) {
  // reduce iterates through every element in the `data` array
  // and accumulates it into the object

  let initialValue = {};
  return data.reduce((obj, [key, value]) => {
    obj[key] = value;
    return obj;
  }, initialValue); // this could be in-lined with `{}`
}

var data = [
  ['name', 'Sparky'],
  ['breed', 'lab'],
  ['age', 4]
];

console.log(toObjects(list))

答案 1 :(得分:0)

您可以使用地图功能来实现此目的

var list = [['name', 'Sparky'], ['breed', 'lab'], ['age', 4]];
var newObj = new Object();
list.forEach(function (arr) {
   newObj[arr[0]] = arr[1];
});

console.log(newObj)