2013-11-28 35 views
4

我有一个数组,它是一组如下:Unflatten阵列到四肢

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有没有一个简单的优雅的方式来做到这一点。

+0

谢谢人。我已经有了一个普通的JS解决方案。我想看看下划线中是否有一些标准函数更简单。 – erichrusch

回答

9

下划线,既然你问:Example

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

香草JS:Example

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

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