数组的去重

indexOf() lastIndexOf() 实现数组去重

// indexOf()  lastIndexOf() 实现数组去重
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
for(let i = 0; i < arr.length; i++){
    // i 作为数组的索引值
    // console.log(arr[i]);
    // 判断是否存在重复的值
    // 第一次出现位置的索引值和最后一次出现位置的索引值不相等
    if(arr.indexOf(arr[i]) != arr.lastIndexOf(arr[i])){
        // 出现多次,可以删除一个元素,对原数组进行改变
        arr.splice(i,1);
        // console.log('长度',arr.length);
        // 每次删除后,数组的长度发生改变,但是i++始终执行;导致循环提前结束;因此需要长度和索引值保持一致
        i--;
    }
    // console.log('索引值',i);
}
console.log(arr);
//[ 2, 3, 4, 5, 1 ]

借助空数组实现去重

let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
let newArr=[];
for(let i = 0;i < arr.length;i++){
    // 在新数组中检索原数组中的每个值 不存在则为-1
    if(newArr.indexOf(arr[i]) == -1){
        // 不存在则添加
        newArr.push(arr[i]);
    }
}
console.log(newArr);//[ 1, 2, 3, 4, 5 ]

通过两次循环实现数组去重

// 两次循环实现数组去重
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
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); //[ 1, 2, 3, 4, 5 ]

倒叙遍历数组进行去重

// 倒叙遍历数组进行去重 可以不用考虑数据删除后下标改变造成的影响
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
for(let i = arr.length - 1; i >= 0; i--){
    for(let j = i - 1; j >= 0; j--){
        if(arr[i] == arr[j]){
            arr.splice(j, 1)
        }
    }
}
console.log(arr); //[ 2, 3, 4, 5, 1 ]

通过ES6 set()实现数组去重

let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
let res = [...new Set(arr)];
console.log(res);//[ 1, 2, 3, 4, 5 ]
posted @ 2022-04-03 18:31  秋弦  阅读(35)  评论(0编辑  收藏  举报