Javascript 在数组中使用公共键对对象进行分组
我有多个具有公共关键点的对象,正在尝试对所有重复的对象进行分组,并映射任何对象中存在的任何额外关键点 我的数据如下Javascript 在数组中使用公共键对对象进行分组,javascript,arrays,object,Javascript,Arrays,Object,我有多个具有公共关键点的对象,正在尝试对所有重复的对象进行分组,并映射任何对象中存在的任何额外关键点 我的数据如下 var array = [ { id: 'Staging', cumulative: 16 }, { id: 'Staging', yeasterday: 16 }, { id: 'Staging', week: 16 }, { id: 'Staging', yeasterday: 16 }, { id: 'Staging1', cumulative: 16
var array = [
{ id: 'Staging', cumulative: 16 },
{ id: 'Staging', yeasterday: 16 },
{ id: 'Staging', week: 16 },
{ id: 'Staging', yeasterday: 16 },
{ id: 'Staging1', cumulative: 16 },
{ id: 'Staging1', yeasterday: 16 },
{ id: 'Staging1', week: 16 },
];
预期结果,假设如下
var array = [
{ id: 'Staging', cumulative: 16, month: 16, week: 16, yeasterday: 16 },
{ id: 'Staging1', cumulative: 16, yeasterday: 16, week: 16 },
];
像这样使用
reduce
:
var数组=[{
id:“登台”,
累积:16
}, {
id:“登台”,
昨天:16
}, {
id:“登台”,
第周:16
}, {
id:“登台”,
昨天:16
}, {
id:“Staging1”,
累积:16
}, {
id:“Staging1”,
昨天:16
}, {
id:“Staging1”,
第周:16
}]
var newArray=array.reduce((acc,{id,…rest})=>{
acc[id]={…(acc[id]|{}),…rest};
返回acc;
}, {});
log(newArray)代码>您可以通过使用香草JavaScript(没有任何笨重的外部库,如Lodash)来实现这一点。我的方法将要求您使用Array.reduce(),这是ES6的一个特性。然后,我们可以使用(或)将迭代器
对象(包含映射
对象中每个元素的值)转换为数组,以获得与问题中所述的所需输出类似的格式
const arr=[{id:“Staging”,累计:16},{id:“Staging”,yeasterday:16},{id:“Staging”,week:16},{id:“Staging”,yeasterday:16},
{id:“停滞1”,累计:16},{id:“停滞1”,昨天:16},{id:“停滞1”,周:16}
]
const iteratorMap=arr.reduce((entry,e)=>entry.set(e['id'],{…entry.get(e['id'])|{},…e}),new Map()).values();
常量结果=[…迭代器映射];
控制台日志(结果)代码>您可以轻松使用库并获得结果
var result = _.chain(array)
.groupBy('id')
.map((val) => _.reduce(val, (result, value) => _.merge(result, value), {}))
.value()
请给我读一读。很高兴看到您尝试过的内容和预期的输出。简单的谷歌搜索将为您提供答案。为什么对结果数组的第一个对象重复两次?