从Javascript
1.7开始,有一个Iterator对象,它允许这样做:
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中是否有类似的东西?
现在我正在使用:
function Iterator(o){
/*var k=[];
for(var i in o){
k.push(i);
}*/
var k=Object.keys(o);
return {
next:function(){
return k.shift();
}
};
}
但这通过将所有对象密钥存储在中而产生大量开销k
。
您想要的是对象或数组上的延迟迭代。这在ES5中是不可能的(因此在node.js中是不可能的)。我们最终会得到这个。
唯一的解决方案是找到一个扩展V8的节点模块,以实现迭代器(可能还有生成器)。我找不到任何实现。您可以查看Spidermonkey源代码,并尝试使用C
++作为V8扩展来编写它。
您可以尝试以下操作,但是也会将所有密钥加载到内存中
Object.keys(o).forEach(function(key) {
var val = o[key];
logic();
});
但是,由于这Object.keys
是一种本地方法,因此可能会带来更好的优化。
基准测试
如您所见,Object.keys明显更快。实际的内存存储是否更优化是另一回事。
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);
});
问题内容: 我有一个使用jsoncpp解码JSON字符串的C ++应用程序。我创建了以下函数,但仅向我显示了顶级对象… 如何获取转储整个对象列表的信息? - 功能 - -输入---- -输出- 问题答案: 您可能会遇到一些错误,这些错误似乎与您对递归或JSON的key-> value性质没有很好的了解以及如何与所使用的库相关联。我根本没有测试过此代码,但它应该可以更好地工作。
问题内容: 我正在尝试遍历JSON对象以导入数据,即标题和链接。我似乎无法掌握过去的内容。 JSON: 我尝试使用字典: 此代码仅在之前打印信息。( 忽略贾斯汀·比伯的曲目 :) 问题答案: 您加载JSON数据有些脆弱。代替: 您实际上应该这样做: 您不应该将“ JSON对象”视为什么。您所拥有的是清单。该列表包含两个字典。字典包含各种键/值对,所有字符串。当您这样做时,您将要求列表中的第一个字典
问题内容: 我很难找到一种以我想要的方式遍历此JSON对象的方法。我在这里只使用Javascript。 首先,这是对象 现在,我正在尝试基本方法来访问此对象上的每个dialog_trunk。理想情况下,我想遍历对象,并为每个主干显示其值。 我已经尝试过使用for循环动态地生成dialog_trunk的名称/编号,但是我无法使用对象名称的字符串来访问该对象,因此我不确定从何处去。 问题答案: 为此使
问题内容: 我在C#中使用JSON.NET解析来自Klout API的响应。我的回答是这样的: 如您所见,它包含5个标签。也许下次是6或1或其他一些数字。我想遍历JSON并获取每个标签的值。我不知道会有多少个循环。我该如何解决? 问题答案: 要么
假设每种颜色总是有一辆车。所以我总是在找一辆车,不多也不少。 如何确保始终有一个对象被找到并返回?
问题内容: 我正在尝试遍历json文件并获取所需的详细信息,这是我的json 我的java代码 如您在代码中所看到的,我正在导入json文件并尝试获取下一个元素并从中打印组件,我还应该同时打印标头,行列式和行列式值。谢谢 问题答案: 您没有数组-您拥有名称为“ 000”等的 属性 。数组如下所示: 请注意,-表示JSON数组。 您可以遍历using 的属性: 要么: