2017-06-22 58 views
1

我有一個數組,100元素,我想從第10到第15個(10, 11, 12, 13, 14, 15),從20到25,從30到35,從40到45和從50到第55,所以我總是有一個gap= 4並存儲到一個新的2D值。我發現如何存儲到二維數組,但我怎麼能彌補這個差距?Javascript for-loop with某一步驟

這是我怎麼可能讓大小爲6的塊(因爲我總是需要的「十年」前六個要素)

var newArr = []; 
while(arr.length) newArr.push(arr.splice(0,6)); 

function splitArray(array, part) { 
    var tmp = []; 
    for(var i = 0; i < array.length; i += part) { 
     tmp.push(array.slice(i, i + part)); 
    } 
    return tmp; 
} 

console.log(splitArray(m1, 6)); 

但首先我必須製作一組新的元素(10-15,20-25等......)。我怎麼能這樣做?

回答

0

您的函數需要一個單獨的參數來確定每個零件的步幅和大小。它在遞增for循環變量時使用步幅,以及採取切片時的大小。

function splitArray(array, stride, size) { 
 
    var tmp = []; 
 
    for(var i = 0; i < array.length; i += stride) { 
 
     tmp.push(array.slice(i, i + size)); 
 
    } 
 
    return tmp; 
 
} 
 

 
var m1 = []; 
 
for (var i = 0; i < 100; i++) { 
 
    m1.push(i); 
 
} 
 
console.log(splitArray(m1, 10, 6));

+0

謝謝你的回答和這樣一個很好的解釋! –

+0

@AnnaF如果它回答你的問題,請標記爲答案 –

0

generator function消除了需要存儲中間結果。引入offset參數允許你跳過前五個值0, 1, 2, 3, 4, 5

function* splitArray(array, stride, size, offset = 0) { 
 
    for (let i = offset; i < array.length; i += stride) { 
 
    yield array.slice(i, i + size); 
 
    } 
 
} 
 

 
// Example: 
 
const array = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]; 
 
console.log(...splitArray(array, 10, 6, 10));

從這些特殊性

除此之外,這個實現是相同的Barmar's answer