首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript合并对象数组,数组中的结果对象值

javascript合并对象数组,数组中的结果对象值
EN

Stack Overflow用户
提问于 2017-07-05 14:56:09
回答 5查看 1.1K关注 0票数 0

我想合并一个对象数组,结果是一个具有唯一键和值数组的对象(复制值是可以的)。香草JS或lodash中的解决方案优先。

例如,从这个:

代码语言:javascript
复制
[{ 
  a: 1, 
  b: 2 
}, { 
  a: 1, 
  c: 3 
}]

要这样做:

代码语言:javascript
复制
{ 
  a: [1, 1],
  b: [2],
  c: [3]
}
EN

回答 5

Stack Overflow用户

发布于 2017-07-05 15:07:35

您可以将_.mergeWith()spread syntax结合使用以组合对象:

代码语言:javascript
复制
const data = [{"a":1,"b":2},{"a":1,"c":3}];

const result = _.mergeWith({}, ...data, (v1 = [], v2) => [...v1, v2]);

console.log(result);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

票数 3
EN

Stack Overflow用户

发布于 2017-07-05 17:57:29

ES6变体:

代码语言:javascript
复制
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)

票数 1
EN

Stack Overflow用户

发布于 2017-07-05 15:10:41

不使用loadash:

代码语言:javascript
复制
  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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44918989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档