Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中使用公共键对对象进行分组_Javascript_Arrays_Object - Fatal编程技术网

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()

请给我读一读。很高兴看到您尝试过的内容和预期的输出。简单的谷歌搜索将为您提供答案。为什么对结果数组的第一个对象重复两次?