数组取相同对象并累加

图片描述

一个数组下有重复的值,希望去重后 计算相同值的累加数
如: var arr = [{id: 1}, {id: 2}, {id: 3}, {id: 1}, {id: 1}]

希望返回的值是: [{id: 1} * 3, {id: 2}, {id: 3}]

请忽略 *3 的语法,, 只是希望达成这样的效果.现求教好的解决方法.

说下要求的案例: 多个项目, 项目有可能存在相同的值.有则合成一个. 并给出相同值的项目合成次数()?

阅读 4.5k
2 个回答
  var arr = [
    {id: 1}, {id: 2}, {id: 3}, {id: 1}, {id: 1}
  ]

  var result = new Map()
  arr.forEach(function (obj) {
      let item = obj.id
      if (result.has(item)) {
          result.set(item, result.get(item)+1)
      } else {
          result.set(item, 1)
      }
  })

这种格式,ok 吗。

  var arr  = [
            {id:"11111111"},
            {id:"22222222"},
            {id:"22222222"},
            {id:"22222222"},
            {id:"33333333"},
            {id:"11111111"},
            {id:"11111111"},
            {id:"33333333"},
            {id:"11111111"},
            {id:"11111111"},
        ];
        


var hash = {};
arr = arr.reduce(function(item, next) {
    if(hash[next.id]){
        item.map((e,i)=>{
            next.id == e.id ? item[i].sum++ :""
        })
    }else{
        next.sum = 1;
        hash[next.id] = true && item.push(next);
    }
    return item
}, [])
console.log(arr);

// 题基本都一样 就不改了
clipboard.png

推荐问题