Javascript迭代块/分组数组

时间:2016-08-21 08:19:13

标签: javascript arrays lodash

在某种情况下,我有一个包含数千件物品的阵列, 首先,我将这个数组分成每组1000个块,然后我调用一个处理数组中第一个块的函数,它返回新的分组块。

// 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方法,然后处理第一个块,删除它然后返回新的分组块,

我只想循环遍历组数组,直到它们变空。而不是一遍又一遍地调用此功能

1 个答案:

答案 0 :(得分:4)

而不是:

return ids;

再次调用main函数:

LoopArrayGroups(ids);

备注

递归调用将在大多数环境中增加每次调用时堆栈的使用,因为目前没有多少JavaScript引擎实现了尾递归优化。

实际上,这意味着如果你有一个巨大的数量的chuncks,你可能会遇到堆栈溢出错误。如果这是一个问题,您应该更改递归调用以使其异步:

setTimeout(LoopArrayGroups.bind(ids), 0);

由于您已经在myFunction中进行了异步处理,因此实际上没有任何缺点。