Heim  >  Artikel  >  Web-Frontend  >  Zusammenfassung mehrerer Methoden zur Array-Deduplizierung in js

Zusammenfassung mehrerer Methoden zur Array-Deduplizierung in js

巴扎黑
巴扎黑Original
2017-07-18 18:24:071537Durchsuche

Methode 1:

  1. Doppelschichtige Schleife, äußeres Schleifenelement, Wert vergleichen, wenn innere Schleife

  2. Wenn es den gleichen Wert gibt Wenn sie nicht identisch sind, drücken Sie sie in das Array

Array.prototype.distinct = function(){var arr = this,
        result = [],
        i,
        j,
        len = arr.length;for(i = 0; i < len; i++){for(j = i + 1; j < len; j++){if(arr[i] === arr[j]){
                j = ++i;
            }
        }
        result.push(arr[i]);
    }return result;
}var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();             //返回[3,4,2,1]

Methode 2: Verwenden Sie Spleiß, um direkt am ursprünglichen Array zu arbeiten

  1. Doppelschichtschleife, äußeres Schleifenelement, innerer Schleifenvergleichswert

  2. Wenn die Werte gleich sind, löschen Sie diesen Wert

注意点: Nach dem Löschen von Elementen muss die Länge des Arrays um 1 reduziert werden.

Array.prototype.distinct = function (){var arr = this,
        i,
        j,
        len = arr.length;for(i = 0; i < len; i++){for(j = i + 1; j < len; j++){if(arr[i] == arr[j]){
                arr.splice(j,1);
                len--;
                j--;
            }
        }
    }return arr;
};var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

Vorteile: Einfach und leicht zu verstehen
Nachteile: Hoher Speicherverbrauch und langsame Geschwindigkeit

Methode 3: Verwenden Sie die Eigenschaften von Objekten, die nicht identisch sein können, um Duplikate zu entfernen

Array.prototype.distinct = function (){var arr = this,
        i,
        obj = {},
        result = [],
        len = arr.length;for(i = 0; i< arr.length; i++){if(!obj[arr[i]]){    //如果能查找到,证明数组元素重复了obj[arr[i]] = 1;
            result.push(arr[i]);
        }
    }return result;
};var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

Methode 4: Array-rekursive Deduplizierung

  1. Rekursives Denken verwenden

  2. Zuerst sortieren, dann am Ende vergleichen, Wenn sie gleich sind, löschen Sie

Array.prototype.distinct = function (){var arr = this,
        len = arr.length;

    arr.sort(function(a,b){        //对数组进行排序才能方便比较return a - b;
    })function loop(index){if(index >= 1){if(arr[index] === arr[index-1]){
                arr.splice(index,1);
            }
            loop(index - 1);    //递归loop函数进行去重        }
    }
    loop(len-1);return arr;
};var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];var b = a.distinct();
console.log(b.toString());        //1,2,3,4,5,6,45,56

Methode 5: Verwenden Sie indexOf und forEach

Array.prototype.distinct = function (){var arr = this,
        result = [],
        len = arr.length;

    arr.forEach(function(v, i ,arr){        //这里利用map,filter方法也可以实现var bool =  arr.indexOf(v,i+1);        //从传入参数的下一个索引值开始寻找是否存在重复if(bool === -1){
            result.push(v);
        }
    })return result;
};var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];var b = a.distinct();
console.log(b.toString());    //1,23,2,3

Methode 6: Verwenden Sie den ES6-Satz

Legen Sie die Datenstruktur fest, sie ähnelt einem Array und die Werte seiner Mitglieder sind eindeutig.

Verwenden Sie Array.from, um die Set-Struktur in ein Array umzuwandeln

function dedupe(array){return Array.from(new Set(array));
}

dedupe([1,1,2,3]) //[1,2,3]

Der Erweiterungsoperator (...) wird intern für...of-Schleife verwendet

let arr = [1,2,3,3];
let resultarr = [...new Set(arr)];   
console.log(resultarr);  //[1,2,3]

Das obige ist der detaillierte Inhalt vonZusammenfassung mehrerer Methoden zur Array-Deduplizierung in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn