1. 程式人生 > 其它 >陣列的去重

陣列的去重

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 ]