Object.assign
:let merged = Object.assign({}, ...arr); // ES6 (2015) syntax
var merged = Object.assign.apply(Object, arr); // ES5 syntax
Object.assign
在许多环境中尚未实现,您可能需要使用polyfill(可以使用core-js、其他polyfill或在MDN上使用polyfill)来填充它。_.assign
函数,用于实现相同的功能。 var merged = _.assign.apply(_, [{ a: 1 }, { b: 2 }, { c: 3 }]);
Object.assign({}, ...arr)
吗?! - BergiObject.assign({}, ...ids
。 - Richard FernandezObject.assign
不具备递归功能。 - Bergi以下是不使用ES6方法的版本...
var arr = [{ a: 1 }, { b: 2 }, { c: 3 }];
var obj = {};
for(var i = 0; i < arr.length; i++) {
var o = arr[i];
for(var key in o) {
if(typeof o[key] != 'function'){
obj[key] = o[key];
}
}
}
console.log(obj);
fiddle: http://jsfiddle.net/yaw3wbb8/
&& !o.propertyIsEnumerable(key)
是否可以解决这个问题? - Michael CoxonObject(o).hasOwnProperty(obj)
可以解决这个问题(确保它不在原型上)- Object(o)
部分是为了确保我们不调用不存在的方法,以便例如传递4
不会失败(并且不复制任何内容)。 - Benjamin GruenbaumArray.prototype.length
这样的东西,对吧?或者我完全误解了吗? - Michael CoxonObject.prototype.hasOwnProperty.call(o, i)
,以确保我们不会调用自定义方法或非函数属性值。 - Bergivar _ = require('underscore');
var a = [{ a: 1 }, { b: 2 }, { c: 3 }];
var result = _.extend.apply(null, a);
console.log(result); // { a: 1, b: 2, c: 3 }
console.log(a); // [ { a: 1, b: 2, c: 3 }, { b: 2 }, { c: 3 } ]
为了避免修改原始数组,您应该使用
var _ = require('underscore');
var a = [{ a: 1 }, { b: 2 }, { c: 3 }];
var result = _.extend.apply(null, [{}].concat(a));
console.log(result); // { a: 1, b: 2, c: 3 }
console.log(a); // [ { a: 1 }, { b: 2 }, { c: 3 } ]
补充接受的答案,提供一个使用ES6的运行代码片段。
let input = [{ a: 1 }, { b: 2 }, { c: 3 }]
//Get input object list with spread operator
console.log(...input)
//Get all elements in one object
console.log(Object.assign(...input))
var arr = [{ a: 1 }, { b: 2 }, { c: 3 }];
var object = {};
arr.map(function(obj){
var prop = Object.getOwnPropertyNames(obj);
object[prop] = obj[prop];
});
Object.assign
和 array.prototype.reduce
函数的好用法例子:let merged = arrOfObjs.reduce((accum, val) => {
Object.assign(accum, val);
return accum;
}, {})
这个问题被提出6年后。
Object.assign是我最喜欢的答案(如上所述)。
但这也合法吗?
let res = {};
[{ a: 1 }, { b: 2 }, { c: 3 }].forEach(val => {
let key = Object.keys(val);
console.log(key[0]);
res[key] = val[key];
})
使用更现代的扩展运算符
arrOfObj.reduce( (acc, curr) => ({ ...acc, ...cur }) );
const data = [
[{ a: "a" }, { b: "b" }, { c: "c" }],
[{ d: "d" }, { e: "e" }, { f: "f" }],
[{ g: "g" }, { h: "h" }, { i: "i" }],
];
function convertToObject(array){
const response = {};
for (let i = 0; i < array.length; i++) {
const innerArray = array[i];
for (let i = 0; i < innerArray.length; i++) {
const object = innerArray[i];
const keys = Object.keys(object);
for (let j = 0; j < keys.length; j++) {
const key = keys[j];
response[key] = object[key];
}
}
}
return response;
}
console.log(convertToObject(data));