1. forEach配合includes
创建新数组,然后循环旧数组,用includes 判断每次 forEach循环的元素是否存在于新数组中,如果没有就把当前元素添加到新数组中
代码:
var arr = [1,2,2,3,4,4,5,4]
newArr=[]
arr.forEach((item)=>{
newArr.includes(item) ? '' : newArr.push(item)
})
console.log(newArr)
打印结果:
2.forEach配合indexof
创建新数组,循环旧数组,indexof等于-1说明循环的元素不存在,所以就把不存在的元素添加到新数组中,从而进行去重
代码:
var arr = [1, 2, 2, 3, 4, 4, 5, 4];
newArr = [];
arr.forEach(item => {
if (newArr.indexOf(item) == -1) {
newArr.push(item);
}
});
console.log(newArr);
打印结果:
3.Set
Set本身是一个构造函数,用来生成Set数据结构,它类似于数组,成员的值都是唯一的,Set中的元素只会出现一次,Set结构不会添加重复的值
代码:
var arr = [1, 2, 2, 3, 4, 4, 5, 4];
newArr = [...new Set(arr)];
console.log(newArr);
打印结果:
4.filter配合includes
创建新数组,循环旧数组,用includes 判断每次filter过滤的元素是否存在于新数组中,如果没有就把元素添加到新数组中,filter 方法和forEach差不多,只是forEach没有返回值,直接改变原数组,filter是返回一个新数组
代码:
var arr = [1, 2, 2, 3, 4, 4, 5, 4];
newArr = [];
arr.filter(item => {
return newArr.includes(item) ? "" : newArr.push(item);
});
console.log(newArr);
打印结果:
5.reduce配合includes
accumulator:表示上一次调用回调时的返回值,或者初始值 init;
current:表示当前正在处理的数组元素
代码:
arr = [1, 2, 2, 3, 4, 4, 5, 4].reduce((accumulator, current) => {
return accumulator.includes(current) ? accumulator : accumulator.concat(current);
}, []);
console.log(arr);
打印结果: