JavaScript使用reduce分组及合并数组的object对象

对象数组示例:


var objects = [
  {name:'group1', usedCount: 2, color:'red'},
  {name:'group1', usedCount: 1, color:'blue'},
  {name:'group1', usedCount: 1, color:'orange'},
  {name:'group2', usedCount: 2, color:'blue'},
  {name:'group2', usedCount: 2, color:'red'},
  {name:'group3', usedCount: 1, color:'red'},
  {name:'group3', usedCount: 4, color:'red'}
]

分组合并后的结果

[
  {name:'group1', usedCount: 4, color:['red','blue','orange']},
  {name:'group2', usedCount: 4, color:['blue','red']},
  {name:'group3', usedCount: 5, color:['red']}
]

这是根据对象的name进行合并,合并后,usedCount累加,color合并为数组。

reduce方法

var result= objects.reduce((groups, item)=>{
  var groupFound= groups.find(arrItem => item.name === arrItem.name);
  if(groupFound) {
    groupFound.usedCount += item.usedCount;
    if(groupFound.color.indexOf(item.color)  == -1) {  //去重
      groupFound.color.push(item.color);
    }
  } else {
    //不要直接在原来的对象修改,新建对象
    var newGroup = {
        name: item.name,
        usedCount: item.usedCount,
        color: [item.color]
    }
    groups.push(newGroup);
  }
  return groups;
},[]);

console.log(result);

版权声明:著作权归作者所有。

相关推荐

JavaScript删除数组里重复的元素

JavaScript里有多种方法可以用来对数组元素去重。ES6 SetES6提供了一个Set对象,用它可以很简单便可以对数组元素去重。function uniq(arr) {    return Array.from(new Set(arr)); } filter另外也可以通过filter来对数组元素去重。functi

Git使用mergetool处理合并冲突

Git做合并时难免会发生冲突,发生冲突我们可以使用git的mergetool来处理。在使用mergetool前需要先了解下Git用于处理冲突的几个概念:LOCAL - 本机在当前分支下文件的headREMOTE - 在远程将要合并到LOCAL当前分支的headBASE - the common ancestor(s) of LOCAL a

JavaScript使用for...in迭代数组分析(不推荐)

for...in与其说是迭代,更恰当的说法应该是枚举。其目的是用来枚举object对象的属性,包括对象所继承的属性。有部分人会使用for...in来迭代数组,这是一种误用。以下对使用for...in迭代数组分析。问题一var a = ['a','b']; a[5] = 'e'; for (var x in a

JavaScript Array map()函数的用法及误用

Array的map()函数作用是一个数组映射为另一个数组,映射方式是以原数组的元素作为输入,使用提供的回调函数对输入元素处理,处理后返回的结果作为新数组的元素。基本语法var new_array = arr.map(function callback(currentValue, index, array) {  &nb