簡體   English   中英

lodash將數組拆分為nodejs中的chunk

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM