lodash将数组分割成nodejs中的块

我有下面的联系人组

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"]...] 

我在nodej中使用lodash 4.17.4,请指教

这与在浏览器中使用不同版本有关,因为如果你在Lodash 4.17.4中查看groupBy的代码,你可以清楚的看到你传入的函数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历史logging,我并不感到惊讶,这种行为随着时间而改变。 前一段时间,它完全从使用一些generics迭代器,这可能包括索引,更简单,显然不包括索引。

如果我是你,我会用一个减less语句来实现这种分块行为:

 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; }, [[]]); }