javascript – lodash将数组拆分为nodejs中的chunk

我有以下小组与联系人

 var groups = {"GROUP":[{'G1: [C1,C2,C3........C500000]},
             {'G2': [C1,C2,C3........C500000,D1,D2,D3........D500000]}
.....]
    }

现在我使用lodash将javascript数组拆分为n个大小的块,如下所示

_.each(groups,function(group){
 var n = 50;
var lists = _.groupBy(group, function(element, index){
  return Math.floor(index/n);
});
lists = _.toArray(lists );
console.log(lists )
})

这在客户端工作正常,但在nodejs中没有.节点js的输出如下

[["C1","C1....]]

数组不会拆分为块,而是以单个数组形式出现.

应该是预期的数组

[["C1","C1"....,"c50"],["C51","C1"....,"c100"]...]

我在nodejs中使用lodash 4.17.4.请指教

最佳答案 这必须与在浏览器中使用不同版本而不是在节点中有关,因为如果你查看
groupBy in Lodash 4.17.4的代码,你可以清楚地看到你传入的函数,iteratee,只用一个参数调用,即键,而不是键和索引:

function groupBy(collection, iteratee) {
  return reduce(collection, (result, value, key) => {
    key = iteratee(value) // <- no index here
    if (hasOwnProperty.call(result, key)) {
      result[key].push(value)
    } else {
      baseAssignValue(result, key, [value])
    }
    return result
  }, {})
}

看看groupBy.js的所有git历史,我对这种行为随着时间的推移而发生变化并不感到惊讶.前段时间它完全从使用一些通用的iteratee(可能包括索引)改为更简单的东西,显然不包括索引.

如果我是你,我会用reduce语句实现这种分块行为:

function chunkArray(array, chunkSize) {
  return _.reduce(array, function(result, value) {
    var lastChunk = result[result.length-1];
    if (lastChunk.length < chunkSize) lastChunk.push(value);
    else result.push([value]);
    return result;
  }, [[]]);
}
点赞