我想合并一个对象数组,结果是一个具有唯一键和值数组的对象(复制值是可以的)。香草JS或lodash中的解决方案优先。
例如,从这个:
[{
a: 1,
b: 2
}, {
a: 1,
c: 3
}]要这样做:
{
a: [1, 1],
b: [2],
c: [3]
}发布于 2017-07-05 15:07:35
您可以将_.mergeWith()与spread syntax结合使用以组合对象:
const data = [{"a":1,"b":2},{"a":1,"c":3}];
const result = _.mergeWith({}, ...data, (v1 = [], v2) => [...v1, v2]);
console.log(result);<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
发布于 2017-07-05 17:57:29
ES6变体:
const a = [{
a: 1,
b: 2
}, {
a: 1,
c: 3
}]
const b = a.reduce((acc, cur) => Object.assign(acc,
...Object.keys(cur).map(key => ({ [key]: (acc[key] || []).concat(cur[key]) })))
, {})
console.log(b)
发布于 2017-07-05 15:10:41
不使用loadash:
var t = [{
a: 1,
b: 2
}, {
a: 1,
c: 3
}];
var result = {};
debugger;
for(var i=0; i<t.length; i++){
for(var j in t[i]){
if(result.hasOwnProperty(j)){
result[j].push(t[i][j]);
}else{
result[j] = [t[i][j]];
}
}
}
console.log(result);https://stackoverflow.com/questions/44918989
复制相似问题