最近发现日常处理数组的需求频率变多记录一下,如下数据结构进行数组去重,并完成每项中的奥特曼战力值累加,做一个去重统计,要相信光啊。
let arr = [ {id:1,name:'泰罗奥特曼',forceVal:49}, {id:2,name:'佐菲奥特曼',forceVal:59}, {id:3,name:'赛文奥特曼',forceVal:20}, {id:4,name:'迪迦奥特曼',forceVal:70}, {id:1,name:'泰罗奥特曼',forceVal:55}, {id:3,name:'赛文奥特曼',forceVal:73}, {id:2,name:'佐菲奥特曼',forceVal:69}, {id:3,name:'赛文奥特曼',forceVal:42}, {id:2,name:'佐菲奥特曼',forceVal:81}, {id:5,name:'杰克奥特曼',forceVal:42}, {id:1,name:'泰罗奥特曼',forceVal:70}, {id:5,name:'杰克奥特曼',forceVal:70}, {id:4,name:'迪迦奥特曼',forceVal:70}, ]
然后第一想法就是根据id去重,然后累加每一个奥特曼重复项的战力值获得奥特曼大集合。
noRepeatAdd(arr,id,val) { if (!Array.isArray(arr)) { return arr; } if (arr.length == 0) { return []; } let newArrange= arr.reduce((pre, cur) => { let findData = pre.find(Ultraman => cur[id] == Ultraman[id] && cur.key == Ultraman.key) // 查到和累计后的数组相同的做处理 if (findData) { findData[val] = findData[val] + cur[val] } else { //不要直接在原来的对象修改,新建对象 let newItem = JSON.parse(JSON.stringify(cur)) pre.push(newItem) } return pre }, []) console.log("newArrange",newArrange) },
封装了个方法直接回调回M78星云好了。
this.noRepeatAdd(arr,'id','forceVal')
得到结果!!!溯啊~~~~
随笔记录