2013-11-28 34 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"]]