js 计算对象数组中某个属性值重复出现的个数

转载于:前进中的蜗牛

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

//怎么将list转换为下面格式:
[
  {title:"1000积分",num:1},
 {title:"500积分",num:1}, 
 {title:"50积分",num:3}
]//num:serialNumber相同的元素重复次数

1. 首先要先获取所有需要计算的属性值

//先根据所有的title组合成一个数组
let titleList = list.map(item => {
    return item.name
})

//获得["1000积分", "500积分", "50积分", "50积分", "50积分"]

2. 有两种方法将上面返回的结果变成:{1000积分: 1, 500积分: 1, 50积分: 3}

(1)常规的方法:使用 for 循环 ;

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

(2)使用 reduce(),接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。支持IE9+

//用reduce时:
//reduce:计算数组元素相加后的总和
//reduce方法接受两个参数,第一个是函数,第二个是初始值
function getRepeatNum(){ 
        return titleList.reduce(function(prev,next){ 
            prev[next] = (prev[next] + 1) || 1; 
            return prev; 
        },{}); 
} 

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

3.  得到最终结果

let myObj = this.getRepeatNum2(titleList),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}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值