如何在不导致浏览器挂起的情况下循环浏览非常大的对象元素?使用setTimeout循环浏览大型Javascript对象
我可以很容易环通阵列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()为您提供可迭代的属性名称数组。 – Shilly
[Web workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers)或服务器端是线程工作的好选择。但仅限于Web工作人员的现代浏览器。 – Mouser