Js数组去重的5种常用方式

937 阅读2分钟

趁着早上空闲时间,整理一下Js数组去重的方式,数组去重在实际应用中是十分常见的,虽然很简单,但不同场景选择不同的方式提升自己的一种方式


// 1 - indexOf
// 数组的indexOf()返回某个指定元素在数组中首次出现的位置
// 如果没有则返回-1,该方法首先定义一个空数组res
// 然后调用indexOf()对原来的数组进行遍历判断,如果不在res中,则将其push到res中,最后将res返回即可获得去重的数组

function unique(arr){
    if(!Array.isArray(arr)){
        console.log('this is not a array')
        return
    }
    let res = [];
    for(let i = 0;i<len;i++){
        if(res.indexOf(arr[i])=== -1){
            res.push(arr[i])
        }
    }
    return res
}
// indexOf
// 利用indexOf检查元素在数组中第一次出现的位置是否和元素现在的位置相等
// 如果不相等则说明该元素是重复的
function unique(arr){
    if(!Array.isArray(arr)){
        console.log('type error!')
        return
    }
    return Array.prototype.filter.call(arr,(item,index) => {
        return arr.indexOf(item) === index
    })
}
// 相邻元素去重
// 这种方法首先调用了数组的排序方法sort(),
// 然后根据排序后的结果进行遍历及相邻元素对比,如果相同就跳过该元素
function unqiu(arr){
    if(!Array.isArray(arr)){
        console.log('this is not array')
        return
    }
    arr = arr.sort()
    let res = []
    for(let i = 0;i<len;i++){
        if(arr[i] !== arr[i-1]){
            res.push(arr[i])
        }
    }
    return res
}
// set与结构赋值去重
// Es6新增Set类型,最大的特点就是数据不重复,
// Set函数可以接受一个数组(或数组对象)作为参数初始化
function unique(arr){
    if(!Array.isArray(arr)){
        console.log('this is not array')
    }
    return [...new Set(arr)]
}
// 双重循环(不推荐)
// 先定义一个包含元素数组第一个元素的数组,然后遍历元素数组,将原始数组中的每一个元素与新数组中的每一个元素对比
// 如果重复则添加到新数组中,然后返回新数组
// 时间复杂度 O(n^2)
function unique(arr){
    if(!Array.isArray(arr)){
        console.log('this is not array')
        return
    }
    let res = [arr[0]]
    for(let i = 0;i < len;i++){
        let flag = true
        for(let j = 0;j<res.length;j++){
            if(arr[i] === res[j]){
                flag = true
                break
            }
        }
        if(flag){
            res.-push(arr[i])
        }
    }
    return res
}

扫码关注公众号,学习前端小知识