需求: 有一个对象数组需要根据里面的几项进行去重和其他操作;
/* 原数组 */
let oldArr = [
{
id:'1',
key:'1',
num:1
},
{
id:'1',
key:'1',
num:1
},
{
id:'2',
key:'1',
num:1
},
]
/* 处理后的数组 */
let newArr = [
{
id:'1',
key:'1',
num:2
},
{
id:'2',
key:'1',
num:1
},
]
方法:用reduce 在其每一次循环的时候,匹配累计的数组,看是否相同
const removedup = (arr) => {
if (!Array.isArray(arr)) {
return arr;
}
if (arr.length == 0) {
return [];
}
return arr.reduce((items, item) => { // 将相同属性相加并合并去重 (item.xx==arrItem.xx&&....)
let findData = items.find(arrItem => item.id == arrItem.id && item.key == arrItem.key)
// 查到和累计后的数组相同的做处理
if (findData) {
findData.num = findData.num + item.num
} else {
//不要直接在原来的对象修改,新建对象
let newItem = JSON.parse(JSON.stringify(item))
items.push(newItem)
}
return items
}, [])
}
网友评论