Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erklärung zum rekursiven Löschen von Elementen in einem Array in JS

Ausführliche Erklärung zum rekursiven Löschen von Elementen in einem Array in JS

Y2J
Y2JOriginal
2017-05-20 13:18:355479Durchsuche

Dieser Artikel stellt Ihnen hauptsächlich verschiedene Methoden zum zyklischen Löschen von Elementen in einem Array in Javascript vor. Der Artikel bietet einen gewissen Referenz- und Lernwert für alle, die ihn benötigen Schauen Sie gemeinsam vorbei.

Entdecken Sie das Problem

Beim Codieren müssen Sie häufig bestimmte Elemente in einer Schleife entfernen. Gemäß der herkömmlichen Idee erstellen Sie einfach eine for-Schleife, treffen dann eine if-Beurteilung in der Schleife und löschen das angegebene Element in der Beurteilung. Doch die tatsächliche Situation verläuft oft nicht so reibungslos wie erwartet.

Im Folgenden wird ein Stück Javascript-Code als Beispiel verwendet, um diesen Prozess zu demonstrieren.

(function () {
 var arr = [1,2,2,3,4,5];
 var len = arr.length;
 for(var i=0;i<len;i++){
 //打印数组中的情况,便于跟踪数组中数据的变化
 console.log(i+"="+arr[i]);
 //删除掉所有为2的元素
 if(arr[i]==2){
  arr.splice(i,1);
 }
 }
 console.log(arr);
})();

Die laufenden Ergebnisse lauten wie folgt:


Aus dem Endergebnis können Sie erkennen, dass nur eines der übereinstimmenden Elemente vorhanden ist tatsächlich gelöscht. Und ein anderes Element ist noch da.

Aus dem gedruckten laufenden Prozess ist nicht schwer herauszufinden, dass der Grund darin liegt, dass sich beim Löschen eines Elements der Index des Arrays ändert, was zu einer Ausnahme im Programm führt.

Lösung

Sobald Sie die Ursache des Problems gefunden haben, ist es nicht schwer, das Problem zu lösen.

Methode 1

(function () {
 var arr = [1,2,2,3,4,5];
 var len = arr.length;
 for(var i=0;i<len;i++){
 //打印数组中的情况,便于跟踪数组中数据的变化
 console.log(i+"="+arr[i]);
 //删除掉所有为2的元素
 if(arr[i]==2){
  //注意对比这行代码:删除元素后调整i的值
  arr.splice(i--,1);
 }
 }
 console.log(arr);
})();

Der obige Code scheint schwer zu verstehen zu sein. Siehe unten

Methode 2

(function () {
 var arr = [1,2,2,3,4,5];
 var len = arr.length-1;
 //start from the top
 for(var i=len;i>=0;i--){
 console.log(i+"="+arr[i]);
 if(arr[i]==2){
  arr.splice(i,1);
 }
 }
 console.log(arr);
})();

Das Durchlaufen von hinten nach vorne kann das Problem effektiv lösen und ist leicht zu verstehen. Gibt es also eine einfachere Implementierung? Schauen Sie sich dann den folgenden Code an:

Methode 3

(function () {
 var arr = [1,2,2,3,4,5];
 var i = arr.length;
 while(i--){
 console.log(i+"="+arr[i]);
 if(arr[i]==2){
  arr.splice(i,1);
 }
 }
 console.log(arr);
})();

Verwenden Sie while(i--) . Ich persönlich denke, dass dies der prägnanteste und effizienteste ist Code-Implementierung.

Zusammenfassung

[Verwandte Empfehlungen]

1. Kostenloses Javascript-Video-Tutorial

2. Detaillierte Erläuterung eines Beispiels für die Vervollständigung der Sternebewertungsfunktion durch JS

3 Wie bestimmt JS, ob ein Text in voller oder halber Breite vorliegt?

4. nodejs+websocket vervollständigt eine Chat-Systemfunktion

5.Js vervollständigt den Countdown-Jetlag-Effekt

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zum rekursiven Löschen von Elementen in einem Array 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