selectData:需要过滤的数组; (item) => im.id:这个为key,唯一判断条件 let uniqueArr = this.groupAndUniqueBy(selectData, (item) => item.id); let newArr = uniqueArr.map((item) => ({ ...item, count: this.sumBy(selectData.filter((obj) => obj.id === item.id), 'count') }));
1.先通过id过滤出一个新数组
groupAndUniqueBy(arr, key) { let seen = new Set(); return arr.filter((item) => { let k = key(item); return seen.has(k) ? false : seen.add(k); }); },
2.将过滤出来的新数组里面的需要计算的数量进行累加(reduce方法)
sumBy(arr, key) { return arr.reduce((acc, obj) => acc + obj[key], 0); },