Eine Frage, auf die sich Front-End-Interviewer vorbereiten müssen: So entfernen Sie Duplikate aus dem Array von Javascript. Soweit ich weiß, haben Baidu, Tencent, Shanda usw. diese Frage alle in Interviews gestellt. Diese Frage scheint einfach, aber tatsächlich birgt sie versteckte Gefahren. Bei dem Test geht es nicht nur um die Realisierung dieser Funktion, sondern auch um Ihr tiefgreifendes Verständnis für die Ausführung von Computerprogrammen.
Methode 1:
Verwenden Sie Splice, um direkt am ursprünglichen Array zu arbeiten
Doppel- Layer-Schleife, äußeres Schleifenelement. Wenn der Wert
in der inneren Schleife verglichen wird, löschen Sie diesen Wert, wenn der Wert gleich ist
Hinweis: Nach dem Löschen des -Elements , Sie müssen die Länge des Arrays ändern Auch minus 1.
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: hohe Speichernutzung, langsame Geschwindigkeit
Methode 2:
Doppelschichtige Schleife, Elemente der äußeren Schleife, Werte während der inneren Schleife vergleichen
Wenn es dieselben Werte gibt, Überspringen Sie sie, wenn nicht, verschieben 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 3: Verwenden Sie die Attribute des Objekts, um Duplikate zu entfernen, wenn sie nicht die gleichen Eigenschaften haben können
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: ArrayRekursionDuplikation entfernen
Rekursive Idee verwenden
Erst sortieren und dann am Ende vergleichen, dann löschen
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, die einem Array ähnelt, und die Werte seiner Mitglieder sind alle 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]
Erweitern Sie den Operator(...) für den internen Gebrauch for...of-Schleife
let arr = [1,2,3,3]; let resultarr = [...new Set(arr)]; console.log(resultarr); //[1,2,3]
Das obige ist der detaillierte Inhalt vonEin Beispiel für die JS-Implementierung der Array-Deduplizierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!