作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的情况是,我有一个包含数千个项目的数组,首先,我将这个数组分成每组 1000 个 block ,然后我调用一个函数来处理数组中的第一个 block ,并返回新的分组 block 。
// Using lodash
var array = []; // my array with many items
var ids = _.chunk(array, 1000); // grouped array 1000 each
function LoopArrayGroups(ids){
var arrSize = _.size(ids); // number of groups
if(arrSize != 0){
// get First group array,remove it from the list
var toBeUsed = ids[0];
ids.splice(0, 1);
//process first group
myFunction(toBeUsed, function(promise){
if(!promise.error){
// return new array with the first group removed
return ids;
}else{
console.log("Some error " + promise.error);
}
});
}
}
LoopArrayGroups 方法使用分组 block 数组调用,然后它处理第一个 block ,删除它然后返回新的分组 block ,
我只想遍历组数组,直到它们变空。而不是一遍又一遍地调用这个函数
最佳答案
代替:
return ids;
再次调用主函数:
LoopArrayGroups(ids);
在大多数环境下,递归调用会增加每次调用时堆栈的使用,因为目前实现尾递归优化的 JavaScript 引擎并不多。
实际上这意味着如果您有大量 block ,您可能会遇到堆栈溢出错误。如果这是一个问题,您应该更改递归调用以使其异步:
setTimeout(LoopArrayGroups.bind(ids), 0);
因为您已经在 myFunction
中进行了异步处理,所以实际上这样做没有任何缺点。
关于Javascript 遍历 block /分组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39062245/
我是一名优秀的程序员,十分优秀!