将包含对象的数组展平为 1 个对象
IT技术
javascript
lodash
flatten
2021-03-20 04:07:56
6个回答
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)。
您提到了 lodash,因此值得指出的是,它带有一个_.assign
用于此目的的函数,该函数执行相同的操作:
var merged = _.assign.apply(_, [{ a: 1 }, { b: 2 }, { c: 3 }]);
但我真的推荐新的标准库方式。
这是一个不使用 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);
小提琴:http : //jsfiddle.net/yaw3wbb8/
您可以像这样使用 underscore.extend 函数:
var _ = 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))