JS-数组去重笔记

253 阅读1分钟

学习链接来源:juejin.cn/post/684490…

详细文章点击上链接

双重循环

function qc(arr)
{
    var i = 0;
    var j = 0;
    var tempArr = []
    for(i = 0;i<arr.length;i++){
        for(j = 0;j<tempArr.length;j++){
            if(arr[i]==arrrst[j]){
                break;
            }
        }
        if(j==tempArr.length){
            tempArr.push(arr[i])
        }
    }
    return tempArr
}

indexof取代双循环的内循环

function qc2(arr)
{
    var i = 0;
    var tempArr = []
    for(i = 0;i<arr.length;i++){
        if(tempArr.indexOf(arr[i])<0){
            tempArr.push(arr[i])
        }
    }
    return tempArr
}

splice删掉后续重复部分

复杂化了

function qc3(arr){
    var tempIndex = 0
    var tempArr = [...arr]//克隆一份
    for(var i = 0;i<tempArr.length;i++){
        tempIndex = i+1
        while(tempIndex>=0){
            tempIndex = tempArr.indexOf(tempArr[i],tempIndex)
            if(tempIndex>=0){
                tempArr.splice(tempIndex,1)
            }
        }
    }
    return tempArr
}

filter过滤

由于indexof(ele)始终返回的是第一次查询到ele的数组索引,因此后续ele重复了,index却不是第一个查到值的索引,返回false,被滤掉

function qc4(arr){
    return arr.filter(function(ele,index,self){
        return self.indexOf(ele) === index
    })
}

sort排序,比较当前和上一个值

function qc5(arr){
    var tempArr = []
    var tempArr2 = [...arr]//克隆一份
    tempArr2 = tempArr2.sort()
    tempArr.push(tempArr2[0])
    for(var i = 1;i<tempArr2.length;i++){
        if(tempArr2[i-1]!=tempArr2[i])
        {
            tempArr.push(tempArr2[i])
        }
    }
    return tempArr
}

利用对象属性的唯一性

function qc6(arr){
    var tempObj = {}
    var tempArr = []
    for(var i = 0;i<arr.length;i++){
        if(tempObj[arr[i]]===undefined){
            tempObj[arr[i]] = "ok"
            tempArr.push(arr[i])
        }
    }
    return tempArr
}

利用Set集合不重复

function qc7(arr){
    return [...new Set(arr)]
    //return Array.from(new Set(arr))和上一效果一样
}