Karena Javascript 1.7 ada objek Iterator , yang memungkinkan ini:
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();
apakah ada sesuatu seperti ini di node.js?
Saat ini saya sedang menggunakan:
function Iterator(o){
/*var k=[];
for(var i in o){
k.push(i);
}*/
var k=Object.keys(o);
return {
next:function(){
return k.shift();
}
};
}
tapi itu menghasilkan banyak overhead dengan menyimpan semua kunci objek k
.
javascript
node.js
iterator
pelayan
sumber
sumber
createNodeIterator
untuk elemen DOM, saya bahkan tidak punya DOM;) @ c69: saya menyimpan semua data dikeys
objek danvalue
hanya disetel ke1
(sekitar 20MB di tombol 700k), memang, untuk sekarang saya hanya mengabaikan 'overhead' ini, tetapi saya lebih suka solusi yang lebih baik :)Jawaban:
Yang Anda inginkan adalah iterasi malas atas objek atau array. Ini tidak mungkin di ES5 (jadi tidak mungkin di node.js). Kami akan mendapatkan ini pada akhirnya.
Satu-satunya solusi adalah menemukan modul simpul yang memperluas V8 untuk mengimplementasikan iterator (dan mungkin generator). Saya tidak dapat menemukan implementasi apa pun. Anda dapat melihat kode sumber spidermonkey dan mencoba menulisnya dalam C ++ sebagai ekstensi V8.
Anda dapat mencoba yang berikut ini, namun itu juga akan memuat semua kunci ke dalam memori
Namun karena
Object.keys
merupakan metode asli, ini memungkinkan optimasi yang lebih baik.Tolok ukur
Seperti yang Anda lihat, Object.keys secara signifikan lebih cepat. Apakah penyimpanan memori yang sebenarnya lebih optimal adalah masalah yang berbeda.
sumber
forEach
karena setiap langkah iterasi harus dipanggil dari asyncsetTimeout
.async.forEach
Ingat juga bahwa Anda dapat memberikan argumen kedua ke
.forEach()
fungsi yang menentukan objek untuk digunakan sebagaithis
kata kunci.sumber
Object.keys(myObject).forEach(function(key, index, arrayOfKeys) {
Untuk pengulangan sederhana nilai / kunci, terkadang pustaka seperti underscorejs bisa menjadi teman Anda.
hanya untuk referensi
sumber
underscorejs
. Saya menggunakan fungsi ini darilodash
perpustakaan.Saya baru mengenal node.js (sekitar 2 minggu), tetapi saya baru saja membuat modul yang secara rekursif melaporkan ke konsol isi suatu objek. Ini akan mendaftar semua atau mencari item tertentu dan kemudian menelusuri kedalaman yang diberikan jika perlu.
Mungkin Anda dapat menyesuaikan ini sesuai dengan kebutuhan Anda. Tetap Sederhana! Kenapa menyulitkan? ...
sumber
sesuaikan kodenya:
sumber