[英]lodash split array into chunk in 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"]...]
我在nodejs中使用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歷史,我對這種行為隨着時間的推移而發生變化並不感到驚訝。 前段時間它完全從使用一些通用的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;
}, [[]]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.