2016-12-13 1 views
0

In Ruby können wir die einzelnen Schleifen für ein Array unter Verwendung der 1) while-Schleife, 2) yield-Anweisung (um einen Wert an einen Block zu übergeben) und 3) Klasse Array (um die Methode für die Array-Klasse verfügbar zu machen) rekonstruieren); wie folgt:Javascript forEach Schleife - Wie man es rekonstruiert?

class Array 
    def reconstructed_each 
     n = 0 
     while n < self.length 
      yield(self[n]) 
      n += 1 
     end 
     self 
    end 
end 

In Javascript rekonstruierte ich die ForEach-Schleife für ein Array auf ähnliche Weise; wie folgt:

Array.prototype.reconstructedforEach = function(c) { 
    var n = 0; 
    while (n < this.length) { 
     c(this[n]); 
     n += 1; 
    } 
}; 

Der Teil bin ich mir nicht ganz sicher ist, wie die obige Funktion nur auf Arrays zu machen, aber nicht andere Arten von Objekt z.B. Nummer.

UPDATE: Ich habe es herausgefunden. Das obige Code-Snippet wurde entsprechend bearbeitet.

+0

Ihr Ruby-Code gebrochen wird: Sie werden mit der '[]' Methode, aber das Verfahren ist nicht Teil des 'Enumerable' Protokolls. Gleiches gilt für "Länge". Außerdem sollte "each" einen "Enumerator" zurückgeben, wenn er ohne Block aufgerufen wird, was Ihre Methode nicht tut. –

Antwort

0

Sind Sie nur auf der Suche nach einer Möglichkeit, ein JavaScript-Array mit dem While-Konstrukt zu iterieren?

wenn ja:

const arr = ["some", "value", "here"]; 
let i =0; 

while(i < arr.length){ 
//use contents of arr[i] to do something useful 
i++; 
} 

Vielleicht fehlt ich etwas

+0

Nein. Ich versuche zu sehen, was unter der Haube der ForEach-Schleife ist. –

0

Vielleicht sind Sie für so etwas wie Generator-Funktionen suchen?

const myArray = [1,2,3,4,5]; 
function* constructEach(){ 
    let index = 0; 
    while(index < 3) 
    yield myArray[index++]; 
} 

var gen = constructEach(); 

console.log(gen.next().value); // 0 
console.log(gen.next().value); // 1 
console.log(gen.next().value); // 2 
console.log(gen.next().value); // undefined 

(Dieses Beispiel wurde schamlos von MDN gestohlen)