如何将数组转换为对象

时间:2017-10-16 20:18:54

标签: javascript arrays object

我想转此:

let myArray = [ {city: "NY"}, {status: 'full'} ];

到此:

let myObj = { city: "NY", status: 'full' };

我试过这个:

let newObj = {};
for (var i = 0; i < myArray.length; i++) {
  (function(x) {
    newObj = Object.assign(myArray[i]);
  })(i);
}

它将最后一对分配给对象

4 个答案:

答案 0 :(得分:11)

Spread将数组导入Object#assign

&#13;
&#13;
const myArray = [ {city: "NY"}, {status: 'full'} ];

const myObj = Object.assign({}, ...myArray);

console.log(myObj);
&#13;
&#13;
&#13;

注意:分配到空对象。如果省略空对象,原始数组的第一个元素将被突变(所有内容都将合并到其中)。

答案 1 :(得分:3)

您还可以使用Array.reduce()来提供更精细的颗粒控制:

const myArray = [
  { city: 'NY', color: 'blue', rodents: { small: false, medium: false, large: true } },
  { status: 'full', color: 'red' },
  { sandwich: 'flavourful' },
]
    
// item is each object in your array
const reduced = myArray.reduce((newObj, item) => {
  // existing props will be overwritten by newer object entries in the array
  // this example is same as Object.assign spread with right to left precedence,
  // until you want more custom logic
  Object.keys(item).forEach((key) => { newObj[key] = item[key] })
  return newObj
}, {})
    
console.log(reduced)
// you will see `red` overwrite `blue`

  

编辑:在一年之后检查了这个答案之后,我注意到它根本没有针对深度克隆或深度合并的能力进行优化。我建议您更接近研究这些方面,如果您的工作不稳定,请小心复制或破坏参考文献。

     

在上面的示例中没有问题,因为所有值都是基元。

答案 2 :(得分:2)

我倾向于同意enter image description here您的问题似乎是关于创建一个通常不是一个好计划的索引对象,但如果必须用数字键入您的对象,您可以这样做像这样:

let newObj = {};
myArray.forEach((val, index) => { newObj[index] = val });

答案 3 :(得分:1)

let myArray = [ {city: "NY"}, {status: 'full'} ];

let newObj = myArray.reduce((acc, curr) => {
    Object.keys(curr).forEach(val => {
    acc[val] = curr[val]
  })
  return acc
}, {})

console.log(newObj)

根据caniuse.com

,IE支持此语法