将数组分解为四人一组

Unflatten Arrays into groups of fours

本文关键字:四人 一组 数组 分解      更新时间:2023-11-13

我有一个数组,如下所示:

var someArray = ['val1','val2','val3','val4','val5','val6','val7','val8','val9','val10','val11','val12'];

我正试图找到一种优雅的方法,使用underscore,简单地将其转换为一个数组,比如…

[['val1','val2','val3','val4'], ['val5','val6','val7','val8'], ['val9','val10','val11','val12']]

其中,新数组的每个索引是来自第一个数组的四个元素的组。有没有一种简单优雅的方法可以用underscore.js做到这一点。

Undercore,因为您问了:(示例)

var i = 4, list = _.groupBy(someArray, function(a, b){
    return Math.floor(b/i);
});
newArray = _.toArray(list);

香草JS:(示例)

var newArray = [], size = 4;
while (someArray.length > 0) newArray.push(someArray.splice(0, size));

纯JavaScript解决方案,使用splice():

Object.defineProperty( Array.prototype, 'eachConsecutive', {
  value:function(n){
    var copy = this.concat(), result = [];
    while (copy.length) result.push( copy.splice(0,n) );
    return result;        
  }
});
var someArray = ['val1','val2','val3','val4','val5','val6','val7','val8','val9','val10','val11','val12'];
var chunked = someArray.eachConsecutive(4);
//-> [["val1","val2","val3","val4"],["val5","val6","val7","val8"],["val9","val10","val11","val12"]]