indexOf()方法
indexOf()方法使用全等(===)判断,因此结果含有两个NaN
let arr1 = [1, 2, 3];
let arr2 = arr1;
let arr = [1,1,22,22,'ab','ab',true,true,false,false,null,null,undefined,undefined];
// 创建一个空数组,存储去重后的数组
let newArr = [];
// 1--> for循环 + indexOf() +push()
for (let i = 0; i < arr5.length; i++) {
if (newArr.indexOf(arr5[i]) === -1) {
newArr.push(arr5[i]);
}
}
//结果:[1, 22, 'ab', '', Array(3), true, false, null, undefined, NaN, NaN] 无法去除NaN
// 1-1 --> 逻辑与优化
for (let i = 0; i < arr5.length; i++) {
newArr.indexOf(arr5[i]) === -1 && newArr.push(arr5[i]);
}
//结果:[1, 22, 'ab', '', Array(3), true, false, null, undefined, NaN, NaN]无法去除NaN
// 2--> forEach() + indexOf() +push()
arr.forEach(function (item, index, arr) {
newArr.indexOf(item) === -1 && newArr.push(item);
});
//结果: [1, 22, 'ab', '', Array(3), true, false, null, undefined, NaN, NaN]
reduce()
includes() 使用 零值相等算法
let res = arr.reduce((preValue, currentValue) => {
!preValue.includes(currentValue) && preValue.push(currentValue);
//
return preValue;
}, []);
console.log(res);
//结果:[1, 22, 'ab', '', Array(3), true, false, null, undefined, NaN]
filter
虽然使用了includes,但filter遍历了所有元素
let res = newArr.filter((item) => {
return !newArr.includes(arr);
});
// 结果: [1, 22, 'ab', '', Array(3), true, false, null, undefined, NaN, NaN]
Set集合
利用Set元素唯一的特点
let res = [...new Set(arr)]
//结果:[1, 22, 'ab', '', Array(3), true, false, null, undefined, NaN]
(文章不断更新中...)