Seit Javascript 1.7 gibt es ein Iterator- Objekt, das Folgendes ermöglicht:
var a={a:1,b:2,c:3};
var it=Iterator(a);
function iterate(){
try {
console.log(it.next());
setTimeout(iterate,1000);
}catch (err if err instanceof StopIteration) {
console.log("End of record.\n");
} catch (err) {
console.log("Unknown error: " + err.description + "\n");
}
}
iterate();
Gibt es so etwas in node.js?
Im Moment benutze ich:
function Iterator(o){
/*var k=[];
for(var i in o){
k.push(i);
}*/
var k=Object.keys(o);
return {
next:function(){
return k.shift();
}
};
}
Dies führt jedoch zu einem hohen Overhead, da alle Objektschlüssel gespeichert werden k
.
javascript
node.js
iterator
Stewe
quelle
quelle
createNodeIterator
für DOM-Elemente zu sein, ich habe nicht einmal ein DOM;) @ c69: Ich speichere alle Daten imkeys
Objekt und dasvalue
ist nur auf1
(ungefähr 20 MB in 700k Schlüsseln) eingestellt, in der Tat für Jetzt ignoriere ich nur diesen 'Overhead', aber ich würde eine bessere Lösung bevorzugen :)Antworten:
Was Sie wollen, ist eine verzögerte Iteration über ein Objekt oder Array. Dies ist in ES5 nicht möglich (daher in node.js nicht möglich). Wir werden das irgendwann bekommen.
Die einzige Lösung besteht darin, ein Knotenmodul zu finden, das V8 erweitert, um Iteratoren (und wahrscheinlich Generatoren) zu implementieren. Ich konnte keine Implementierung finden. Sie können sich den Spidermonkey-Quellcode ansehen und versuchen, ihn in C ++ als V8-Erweiterung zu schreiben.
Sie können Folgendes versuchen, es werden jedoch auch alle Schlüssel in den Speicher geladen
Da es sich jedoch
Object.keys
um eine native Methode handelt, kann dies eine bessere Optimierung ermöglichen.Benchmark
Wie Sie sehen können, ist Object.keys deutlich schneller. Ob der tatsächliche Speicher optimaler ist, ist eine andere Frage.
quelle
forEach
da jeder Iterationsschritt von einemsetTimeout
async.forEach
Denken Sie auch daran, dass Sie der
.forEach()
Funktion, die das alsthis
Schlüsselwort zu verwendende Objekt angibt, ein zweites Argument übergeben können .quelle
Object.keys(myObject).forEach(function(key, index, arrayOfKeys) {
Für eine einfache Iteration von Schlüsseln / Werten können manchmal Bibliotheken wie Unterstriche Ihr Freund sein.
nur als Referenz
quelle
underscorejs
. Ich habe diese Funktion aus derlodash
Bibliothek verwendet.Ich bin neu in node.js (ca. 2 Wochen), habe aber gerade ein Modul erstellt, das den Inhalt eines Objekts rekursiv an die Konsole meldet. Es werden alle aufgelistet oder nach einem bestimmten Element gesucht und bei Bedarf ein Drilldown um eine bestimmte Tiefe durchgeführt.
Vielleicht können Sie dies an Ihre Bedürfnisse anpassen. Halte es einfach! Warum komplizieren? ...
quelle
Passen Sie seinen Code an:
quelle