Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung von forEach in der Javascript-Array-Schleifendurchquerung

Detaillierte Erläuterung von forEach in der Javascript-Array-Schleifendurchquerung

高洛峰
高洛峰Original
2016-12-07 14:15:23861Durchsuche

1.js-Array-Schleifendurchlauf.

Array-Schleifenvariable, das erste, was mir in den Sinn kommt, ist for(var i=0;i

Darüber hinaus können Sie auch die einfachere forEach-Methode

2.forEach-Funktion verwenden.

Die Array-Typen von Firefox und Chrome verfügen beide über forEach-Funktionen. Verwenden Sie es wie folgt:

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
</HEAD>
  
<BODY>
<script>
var arryAll = [];
arryAll.push(1);
arryAll.push(2);
arryAll.push(3);
arryAll.push(4);
 
//匿名方式
arryAll.forEach(function(e){
  alert(e);
})
 
function t1(arg){alert(arg);}
//非匿名方式
arryAll.forEach(t1,arryAll);
 
</script>
</BODY>
</HTML>

Der obige Code funktioniert jedoch im IE nicht ordnungsgemäß.

Weil das Array des IE diese Methode nicht hat

alert(Array.prototype.forEach);

Wenn Sie den obigen Satz ausführen, erhalten Sie „undefiniert“, was bedeutet dass es im IE keine forEach-Methode im Array gibt.

3. Machen Sie den IE mit der forEach-Methode kompatibel

Da das Array des IE keine forEach-Methode hat, werden wir diese Prototypmethode manuell hinzufügen.

//Array.forEach implementation for IE support..
//https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach
if (!Array.prototype.forEach) {
  Array.prototype.forEach = function(callback, thisArg) {
    var T, k;
    if (this == null) {
      throw new TypeError(" this is null or not defined");
    }
    var O = Object(this);
    var len = O.length >>> 0; // Hack to convert O.length to a UInt32
    if ({}.toString.call(callback) != "[object Function]") {
      throw new TypeError(callback + " is not a function");
    }
    if (thisArg) {
      T = thisArg;
    }
    k = 0;
    while (k < len) {
      var kValue;
      if (k in O) {
        kValue = O[k];
        callback.call(T, kValue, k, O);
      }
      k++;
    }
  };
}

Eine ausführliche Einführung finden Sie unter:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ Array/forEach

4. Wie kann ich aus der Schleife ausbrechen?

Js ForEach kann in dieser Situation nicht continue, break verwenden. Sie können die folgenden zwei Methoden verwenden:

1. if-Anweisungssteuerung

2. Return-Anweisungssteuerung (return true oder return false)

Tatsächlich hat return eine ähnliche Funktion, um fortzufahren

Das folgende Beispiel besteht darin, die Vielfachen von 2 und herauszunehmen 3 im Array;

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
</HEAD>
  
<BODY>
<script>
if (!Array.prototype.forEach) {
  Array.prototype.forEach = function(callback, thisArg) {
    var T, k;
    if (this == null) {
      throw new TypeError(" this is null or not defined");
    }
    var O = Object(this);
    var len = O.length >>> 0; // Hack to convert O.length to a UInt32
    if ({}.toString.call(callback) != "[object Function]") {
      throw new TypeError(callback + " is not a function");
    }
    if (thisArg) {
      T = thisArg;
    }
    k = 0;
    while (k < len) {
      var kValue;
      if (k in O) {
        kValue = O[k];
        callback.call(T, kValue, k, O);
      }
      k++;
    }
  };
}
  
var arryAll = [];
arryAll.push(1);
arryAll.push(2);
arryAll.push(3);
arryAll.push(4);
arryAll.push(5);
arryAll.push(6);
arryAll.push(7);
  
  
var arrySpecial = [];
  
arryAll.forEach(function(e){
  if(e%2==0)
  {
    arrySpecial.push(e);
  }else if(e%3==0)
  {
    arrySpecial.push(e);
  }
})
  
</script>
</BODY>
</HTML>

Verwenden Sie die Eingabetaste, um den oben genannten Effekt zu erzielen

arryAll.forEach(function(e){
  if(e%2==0)
  { www.jb51.net
    arrySpecial.push(e);
    return;
  }
  if(e%3==0)
  {  
    arrySpecial.push(e);
    return;
  }
})

Was das Schreiben angeht, gibt es noch keine bessere Methode, die dem Break-Effekt ähnelt.

Persönliche Meinung: Ob in Java- oder C#-Syntax, forEach soll alle Werte durchlaufen

Ich habe gesucht und einige sagten, dass die Rückgabe „false“ erreicht werden kann Bei einem Versuch ist die Wirkung von „return false“ die gleiche wie „return“, und die Wirkung von „return true“ ist dieselbe.
Der folgende Testcode wurde von mir selbst hinzugefügt.

var arryAll = [];
arryAll.push(1);
arryAll.push(2);
arryAll.push(3);
arryAll.push(4);
arryAll.push(5);
arryAll.push(6);
arryAll.push(7);
 
arryAll.forEach(function(e){
alert(e);
if(e>3)
return false;
});


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