1. 使用 filter 方法
this.list.filter((item,index,self) => {
return self.findIndex(el => el.id === item.id) === index
})
解释:数组高阶函数的三个参数,item:当前循环项 index: 当前索引 self : 数组本身
1. 对需要去重的数组使用 filter 方法
2. 在方法内部使用 self 参数调用 findIndex 方法
3. 当内层循环项 el.id 与外层的当前循环项 item.id 相同时 返回内层循环项的 index
4. 当内层循环项返回的 index 与外层当前循环项 item 的 index 相等时 说明内层循环找到的元素是第一次被匹配
5. 此时外层 return 的值为 true 代表当前外层循环项的 item 被返回到新数组里
6. 如果内层找到的 id 相等的元素的 index 与外层不一致 说明不是第一次被匹配 外层返回 false 舍弃当前元素
2. 使用 reduce 方法
const obj = {}
this.list = this.list.reduce((preValue,item) => {
if(!obj[item.id]){
obj[item.id] = true
preValue.push(item)
}
return preValue
},[])
思路:
1. 声明一个临时空对象用于判断是否已经访问过相同 id 的 item
2. 如果obj[item.id]为假 说明是第一次访问 将当前 item push到preValue中去 并给obj[item.id] 赋一个值
3. 将处理好的preValue返回 以供下一次的循环使用