数组去重
注意每个方法去重的结果不一样,注意!!!!!!!!
方法一:Es6方法 Set
let arr = [1,undefined,2,2,null,undefined,null,3,2,NaN,NaN,[10,11],[10,11],{name:'a'},{name:'b'}];
console.log([...new Set(arr)]) // [1, undefined, 2, null, 3, NaN, Array(2), Array(2), {…}, {…}]
// 或
let newArr = [...new Set(arr)];
console.log(newArr); // [1, undefined, 2, null, 3, NaN, Array(2), Array(2), {…}, {…}];
方法二:filter方法
// 解构赋值,初始一个新的空数组newArr和定义一个数组
let [arr,newArr] = [[1,undefined,2,2,null,undefined,null,3,2,NaN,NaN,[10,11],[10,11],{name:'a'},{name:'b'}],[]];
arr.filter(item=>{
if(!newArr.includes(item)) newArr.push(item)
});
console.log(newArr); // [1, undefined, 2, null, 3, NaN, Array(2), Array(2), {…}, {…}]
方法三:双重循环for i 和 splice 不推荐
let arr = [1,undefined,2,2,null,undefined,null,3,2,NaN,NaN,[10,11],[10,11],{name:'a'},{name:'b'}];
for(let i = 0; i<arr.length; i++){
for(let j = i + 1; j < arr.length; j++){
if(arr[i]===arr[j]){
arr.splice(j,1)
j--;
arr.length--;
}
}
}
console.log(arr); // [1, undefined, 2, null, 3, NaN, NaN]
方法四:Map和for i
// 解构赋值,初始一个新的空数组newArr和定义一个数组arr,声明Map类型
let [arr,newArr,map] = [[1,undefined,2,2,null,undefined,null,3,2,NaN,NaN,[10,11],[10,11],{name:'a'},{name:'b'}],[],new Map()];
for(let i = 0; i<arr.length; i++){
if(!map.has(arr[i])){
map.set(arr[i],true)
newArr.push(arr[i])
}
}
console.log(newArr); // [1, undefined, 2, null, 3, NaN, Array(2), Array(2), {…}, {…}]