我正在尝试映射一个大型数组(大约11k项)。实际的映射功能非常简单,但是数组中的项目数量太多,会阻塞所有内容。 避免这种情况的最佳方法是什么?我尝试使用异步映射,但遇到了同样的问题。
答案 0 :(得分:1)
您可以使用Promise或setTimeout将同步(映射)操作更改为异步操作。递归函数可用于逐步处理大型数组中的项。
例如:
const largeArrays = [];
const resultArrays = [];
function process(source, target, index) {
if (index === target.length) {
// Now the result Arrays should have all processed data
return
}
// Dummy map action here for example, please change to your own one
target.push(source[index] + 1);
setTimeout(() => { process(source, target, index + 1) }, 0);
}
process(largeArrays, resultArrays, 0)
您可以将代码包装到Promise中并解决它,而不用使用上面的return语句。
您不需要任何精美的库,只需本机javascript函数即可。您可以查看我的两个博客,这些博客说明了这类问题的想法。
How to avoid Stack overflow error on recursion
How to make long running loop breakable?
答案 1 :(得分:0)
我没有尝试过,但是使用了一个处理映射部分的异步函数,然后在每次迭代中使用必要的信息(索引,数组项等)调用该函数会不会有帮助?