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