一、利用filter去重
let arr1 = [1, 1, 'true', 'true', true, true, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}, [], [], [1], [2]];
let arr2 = arr1.filter((el, index, arr) => index == arr.indexOf(el));
console.log(arr2)
//[1,"true",true,false,undefined,null,"NaN",0,"a",{},{},[],[],[1],[2]]
这种方法有两个问题:①可以看到上面的输出里面NaN没有了 ②对引用类型无法判断
二、利用Set去重
利用Set去重有两种写法:
第一种:
let arr1 = [1, 1, 'true', 'true', true, true, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}, [], [], [1], [2]];
let arr2 = Array.from(new Set(arr1))
console.log(arr2)
//[1,"true",true,false,undefined,null,NaN,"NaN",0,"a",{},{},[],[],[1],[2]]
第二种:
let arr1 = [1, 1, 'true', 'true', true, true, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}, [], [], [1], [2]];
let arr2 = [...new Set(array)]
console.log(arr2)
//[1,"true",true,false,undefined,null,NaN,"NaN",0,"a",{},{},[],[],[1],[2]]
两种写法结果差不多,第二种方法还用来去除字符串中的重复字符。
三、利用reduce函数去重
let arr1 = [1, 1, 'true', 'true', true, true, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}, [], [], [1], [2]];
let arr2 = arr1.reduce((arr, el) => arr.includes(el) ? arr : [...arr, el], []);
console.log(arr2)
//[1,"true",true,false,undefined,null,NaN,"NaN",0,"a",{},{},[],[],[1],[2]]
四、利用map去重
let arr1 = [1, 1, 'true', 'true', true, true, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}, [], [], [1], [2]];
let map1 = new Map();
arr1.forEach((el, i) => map1.set(el, i))
let arr2 = []
map1.forEach((el, i, self) => arr2.push(i))
console.log(arr2)
//[1,"true",true,false,undefined,null,NaN,"NaN",0,"a",{},{},[],[],[1],[2]]
五、利用for循环去重
let arr1 = [1, 1, 'true', 'true', true, true, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}, [], [], [1], [2]];
let arr2 = [];
for (let i = 0, len = arr1.length; i < len; i++) {
if (arr2.indexOf(arr1[i]) == -1) {
arr2.push(arr1[i])
}
}
console.log(arr2)
//[1,"true",true,false,undefined,null,NaN,"NaN",0,"a",{},{},[],[],[1],[2]]