迭代node.js中的对象键 [英] Iterate over object keys in node.js
问题描述
自Javascript 1.7起,有一个 Iterator 对象,允许这样做:
Since Javascript 1.7 there is an Iterator object, which allows this:
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();
在node.js中是这样的吗?
is there something like this in node.js ?
现在我正在使用:
function Iterator(o){
/*var k=[];
for(var i in o){
k.push(i);
}*/
var k=Object.keys(o);
return {
next:function(){
return k.shift();
}
};
}
但是通过将所有对象键存储在<$中会产生大量开销c $ c> k 。
but that produces a lot of overhead by storing all the object keys in k
.
推荐答案
您想要的是对对象或数组进行延迟迭代。这在ES5中是不可能的(因此在node.js中是不可能的)。我们最终会得到这个。
What you want is lazy iteration over an object or array. This is not possible in ES5 (thus not possible in node.js). We will get this eventually.
唯一的解决方案是找到一个扩展V8的节点模块来实现迭代器(可能还有生成器)。我找不到任何实现。您可以查看spidermonkey源代码并尝试将其作为V8扩展在C ++中编写。
The only solution is finding a node module that extends V8 to implement iterators (and probably generators). I couldn't find any implementation. You can look at the spidermonkey source code and try writing it in C++ as a V8 extension.
您可以尝试以下操作,但它也会将所有密钥加载到内存中
You could try the following, however it will also load all the keys into memory
Object.keys(o).forEach(function(key) {
var val = o[key];
logic();
});
但是因为 Object.keys
是原生的方法可以允许更好的优化。
However since Object.keys
is a native method it may allow for better optimisation.
正如您所见,Object.keys明显更快。实际内存存储是否更优化是另一回事。
As you can see Object.keys is significantly faster. Whether the actual memory storage is more optimum is a different matter.
var async = {};
async.forEach = function(o, cb) {
var counter = 0,
keys = Object.keys(o),
len = keys.length;
var next = function() {
if (counter < len) cb(o[keys[counter++]], next);
};
next();
};
async.forEach(obj, function(val, next) {
// do things
setTimeout(next, 100);
});
这篇关于迭代node.js中的对象键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!