gpt4 book ai didi

javascript - 使用 setTimeout 循环遍历大 Javascript 对象

转载 作者:行者123 更新时间:2023-12-03 05:00:59 24 4
gpt4 key购买 nike

如何循环遍历非常大的对象元素而不导致浏览器挂起?

我可以使用 setTimeout/setInterval 轻松循环数组,如下所示:

var i = 0;
var l = arr.length;
var interval = window.setInterval(function(){
var k = 100; // process 100 items on each Timeout
var element;
while(k--) {
if (i == l) {
return clearInterval(interval);
}
element = arr[i++];
// ... work here ...
}
}, 100);

但是对于非常大的物体我有什么选择?

  • 首先读取键 for(k in arr) 不是一个选项,因为这将是一个我想避免的大循环。
  • 我无法使用 .splice() 对象,因为它不是数组。

目前我正在创建这样的数组 [{k: .., v:...},{k: .., v:...},{k: .., v:.. .},{k: .., v:...},{k: .., v:...},{k: .., v:...},{k: .., v: ...},...] 但这太浪费空间了。

最佳答案

您可以使用 Object.keys 对对象执行完全相同的逻辑

var i = 0;
var keys = Object.keys( myObj );
var l = keys.length;
var interval = window.setInterval(function(){
var k = 100; // process 100 items on each Timeout
var element;
while(k--) {
if (i == l) {
return clearInterval(interval);
}
element = myObj[ keys[i++] ];
// ... work here ...
}
}, 100);

但是对于数以百万计的键,您应该寻找不同的解决方案,因为您不想循环那么多。也许将所有内容分成批处理等。

因此我的问题是,是否有时您实际上需要同时在内存中存储数百万个对象,因为这听起来像是一个设计问题。

关于javascript - 使用 setTimeout 循环遍历大 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42227273/

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