gpt4 book ai didi

javascript - 是否可以在不使用 for in 循环的情况下迭代 js 对象的属性?

转载 作者:行者123 更新时间:2023-11-28 10:19:36 25 4
gpt4 key购买 nike

我正在尝试做这样的事情:

var myObject={'key1':value1, 'key2': value2, /*etc*/}; // big object created by an ajax call
var key=myObject.getFirstKey(); // something that does this. Maybe an immediately breaking for in loop.

function handleOne()
{
var obj=myObject[key];
// do something...
key=myObject.getNextKey(); // something that does this.
if (key===null) clearInterval(interval);
}

var interval=setInterval(handleOne,1000);

据我所知,迭代 js 对象的唯一方法是 for..in 循环。每次我尝试做这样的事情时,我都需要将所有属性放入一个数组中。

我只是想知道是否有可能从前一个 key 获取下一个 key 而不弄乱数组?

(此脚本是 graeasemonkey 用户脚本的一部分,因此我不介意该解决方案是否仅适用于 Firefox。)

最佳答案

我发现您无法使用 for .. in 循环的原因是 setInterval 调用,它使您的逻辑异步,而 for .. in > 只能同步执行

可以使用Object.keys标准方法(IE6-8不支持)获取与对象关联的所有键,然后使用for语句进行迭代:

var keys = Object.keys(myObject),
i = 0;
function go() {
var value = myObject[keys[i]];
// handle value
i++;
if (i < keys.length) {
setTimeout(go, 200);
}
}
go();

对于 IE6-8,只需自己定义 keys 函数:

!Object.keys && Object.keys = function(o) {
var keys = [];
for (var key in o) {
keys.push(key);
}
return keys;
}

关于javascript - 是否可以在不使用 for in 循环的情况下迭代 js 对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5895586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com