js日常积累 数组去重的几种方法(面试题)

109 阅读2分钟

数组去重的几种方法

示例数组

var arr = [1, 1, true, true, 'true', null, 'null', NaN, 'NaN', undefined,
        {
            test: 1
        }, {
            test: 1
        }, {
            test: 2
        },
        [1, 2, 3],
        [1, 2, 3]
    ];

1. [...new Set(Array)] && JSON.Stringify()

这个去重方法,可以对于数组中的基本数据类型进行去重,无法去重引用类型

let result = [...new Set(arr)]
let arrDeWeight = JSON.Stringify(result)
console.log(arrDeWeight)'
//打印结果
[1,true,"true",null,"null",null,"NaN",null,{"test":1},{"test":1},{"test":2}]

2. splice && for循环

这个去重方法,可以对于数组中的基本数据类型进行去重,无法去重引用类型

function arrDe(arr) {
        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--
                }
            }
        }
        console.log('arr:', arr)
        return arr
    }
    arrDe(arr)

3. indexOf && for循环

这个去重方法,可以对于数组中的基本数据类型进行去重,无法去重引用类型

function arrDe(arr){
    if(!Array.isArray(arr)){
        console.error('not a Array');
        return
    }
    let resulet = [];
    for(let i = 0; i < arr.length; i++){
        if(result.indexOf(arr[i]) == -1){
            result.push(arr[i])
        }
    }
    console.log('result:',result)
    return result
}
arrDe(arr)

3. includes && for循环

这个去重方法,可以对于数组中的基本数据类型进行去重,无法去重引用类型

function arrDe(arr){
    if(!Array.isArray(arr)){
        console.error('not a Array')
    }
    let result = [];
    for(let i = 0;i<arr.length;i++){
        if(!result.includes(arr[i])){
            result.push(arr[i])
        }
    }
    console.log(result)
    return result
}
arrDe(arr)

4. fifter() && indexOf()

这个去重方法,可以对于数组中的基本数据类型进行去重,无法去重引用类型

function arrDe(arr){
       return arr.fifter(function(item,index){
           return arr.indexOf(item) == index
       })
}
console.log(arrDe(arr))

5. hasOwnProperty() && fifter() && JSON.stringify()

这个去重方法,可以对于数组中的基本数据类型进行去重,可以去重引用类型

function arrDe(arr){
    let obj = {};
    return arr.fifter(function(item,index){
        retrun obj.hasOwnProperty(typeof item + JSON.stringify(item) ? false : (obj[typeof(item + JSON.stringify(item))]=true))
    })
}
console.log(arrDe(arr))

5. Map() && JSON.stringify()

这个去重方法,可以对于数组中的基本数据类型进行去重,可以去重引用类型

function arrDe(arr) {
        let map = new Map()
        let result = [];
        for (let i = 0; i < arr.length; i++) {
            let item = arr[i]
            if (!map.has(typeof item + JSON.stringify(item))) {
                result.push(item)
                map.set(typeof item + JSON.stringify(item), true)
            }
        }
        return result
    }
    console.log('arrDe(arr):', arrDe(arr))