数组去重的方法有很多,例如使用Map、Set,或者是数组的forEach、filter等方法都可以实现,这里介绍的是reduce这个方法的去重的用法;
MDN中的介绍:reducer()方法对数组中的每个元素按序执行一个由您提供的 reducer函数,每一次运行 reducer会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。
语法:
array.reduce(callback, initialValue)
function callback(previousValue , currentValue, index, array) { }
callback:包含四个参数;
previousValue:上一次调用callback时返回的值,在第一次调用时,若指定了初始值initialValue,其值则为initialValue,否则为数组索引为0的元素array[0]
currenValue:数组中正在处理的元素,在第一次调用时,若指定了初始值initialValue,其值则为数组索引为0的元素array[0],否则为array[1]
currentIndex:数组中正在处理的元素的索引,若指定了初始值initialValue,则起始索引号为0,否则从索引1起始
array:用于遍历的数组
在实际项目中使用:
let arr = [
{
id: 1,
name: '张三'
},
{
id: 3,
name: '王五'
},
{
id: 1,
name: '张三'
},
{
id: 2,
name: '李四'
},
{
id: 3,
name: '王五'
},
]
let obj = {}
let newArr = arr.reduce((pre, cur) => {
if (!obj[cur.id]) {
obj[cur.id] = true;
return [...pre, cur];
} else {
return pre;
}
}, []);
console.log(newArr);
结果: