js计算数组中某个元素重复出现的个数

1,825 阅读1分钟

场景

let list = [
  {name:"1000积分"},
  {name:"500积分"},
  {name:"50积分"},
  {name:"50积分"},
  {name:"50积分"}
];

统计出重复元素出现的个数,返回形式如

[
  {title:"1000积分",num:1},
  {title:"500积分",num:1},
  {title:"50积分",num:3}
]

步骤

1.将list数组对象根据name返回一个新的数组

  let newArr = list.map(item=>{
      return item.name
  })
  console.log(newArr)//["1000积分", "500积分", "50积分", "50积分", "50积分"]

2.数组newArr此时有两种方法进行统计

(1)不用reduce方法时

function getRepeatNum(){ 
        var obj = {}; 
        for(var i= 0, l = newArr.length; i< l; i++){ 
            var item = newArr[i]; 
            obj[item] = (obj[item] +1 ) || 1; 
        } 
        return obj; 
}

//用reduce时:
//reduce:计算数组元素相加后的总和
function getRepeatNum(){ 
        return newArr.reduce(function(prev,next){ 
            prev[next] = (prev[next] + 1) || 1; 
            return prev; 
        },{}); 
} 


console.log(getRepeatNum());//获得{1000积分: 1, 500积分: 1, 50积分: 3}



let myObj = this.getRepeatNum2(newArr),
winningList = []
for(let i in myObj){
    let obj = {
        title:i,
        num:myObj[i]
    }
    winningList.push(obj)
}
console.log(winningList)//[{"title":"1000积分","num":1},{"title":"500积分","num":1},{"title":"50积分","num":3}]