常用的幾種數組去重方法


1.ES6的Set類數組去重


var arr = [1,2,2,3,3,4,4,1,5,6,6,5]
function unique (arr) {
  return Array.from(new Set(arr))
}

console.log(unique(arr))
 //[1,2,3,4,5,6]

ES6的Set是類數組,里面的值是唯一的,但是不是真正的數組所以要通過Array.from()方法轉化為數組,不考慮兼容問題是最簡單的去重方法


2.for循環嵌套for循環


var arr = [1,2,2,3,3,4,4,1,5,6,6,5];

function unique(arr) {
    for (var i = 0; i < arr.length; i++) {    // 首次遍歷數組
        for (var j = i + 1; j < arr.length; j++) {   // 再次遍歷數組
            if (arr[i] == arr[j]) {          // 判斷連個值是否相等
                arr.splice(j, 1);           // 相等刪除后者
                j--;
            }
        }
    }
    return arr
}
console.log(unique(arr));

兩個for循環加上spliceES5常用的方法
第一個for遍歷每個數組項,第二個for循環遍歷第一個for循環當前遍歷項后面的數組項與第一個for當前數組項作比較,后面存在相等的項,則刪除掉此項,並且j要減一,因為刪除了一項,所以后面的元素往前移了,所以減一來抵消遷移確保每一項遍歷完


3.indexOf去重


var arr = [1,2,2,3,3,4,4,1,5,6,6,5];
function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('錯誤!')
        return
    }
    var array = [];
    for (var i = 0; i < arr.length; i++) {    // 首次遍歷數組
        if (array.indexOf(arr[i]) === -1) {   // 判斷索引有沒有等於
            array.push(arr[i])
        }
    }
    return array
}
console.log(unique(arr));

indexOf()會判斷數組里面是否含有這個值,沒有則返回-1,有則返回存在的數組下標值,有多個只返回第一個,不再繼續判斷
for循環加indexOf,for循環存在newArr里則什么都不做,不存在則加入新數組里,返回新數組


4.利用filter


var arr = [1,2,2,3,3,4,4,1,5,6,6,5];
function unique(arr) {
    return arr.filter( (item, index, arr) => {
        //當前元素,在原始數組中的第一個索引==當前索引值,否則返回當前元素
        return arr.indexOf(item) === index;
    });
}
console.log(unique(arr));

filter加indexOf,判斷當前的索引值等不等於indexOf返回的索引值,等於就是同一個數組項,不等於的情況就是當前的item是第二次出現,而indexOf判斷出來的下標值還是第一個,這一項則不會返回,所以達到了去重的要求



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM