JavaScript 数组去重

54 阅读1分钟

数组去重

注意每个方法去重的结果不一样,注意!!!!!!!!

方法一: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), {…}, {…}]