es6数组(子项为对象)去重方案总结 js数组去重
1.业务需求:
vue项目需要对数组(子项是对象)进行去重。
2.解决方案
2.1使用.filter方法对复杂结构的数组(子项为对象)进行去重:
// 去重函数(test:数组)
dropFilter(test) {
// ele:当前元素的值,index:当前元素的索引值,arr:原数组
return test.filter((ele,index,arr)=>{
// 通过索引筛掉相同的项 sysOrganizeId为对象中唯一值
return arr.findIndex(item=>item.sysOrganizeId===ele.sysOrganizeId) === index
})
},
2.2使用.reduce方法对复杂结构的数组(子项为对象)进行去重:
// 去重函数(list:数组)
dropReduce(list) {
// 定义一个空对象,利用对象的键的唯一进行去重
let obj = {}
// 去重(cur:init默认list,next:数组子项,index:表示当前正在处理的数组元素的索引,arr:表示原数组) sysResourcesId为对象中唯一值
return list.reduce((cur,next,index,arr) => {
obj[next.sysResourcesId]?"":obj[next.sysResourcesId]=true && cur.push(next)
return cur
}, [])
},
2.3使用.reduce方法对简单结构的数组(子项为数字)进行去重:
let arr = [1,2,3,4,5,1,2,1];
// indexOf()判断数组第一次出现的下标
var newArr = arr.reduce((cur, next)=> {
cur.indexOf(next) === -1 && cur.push(next);
return cur;
},[]);