2017-06-22 10 views
1

私は100の要素を持つ配列を持っていますが、10番目から15番目の要素を取ります。(10, 11, 12, 13, 14, 15)、20番目から25番目、30番目から35番目、40番目から45番目、50番目から私はいつもgap= 4を持っていて、新しい2D値に保存します。私は2D配列に格納する方法を見つけましたが、どうすればこのギャップを埋めることができますか?特定のステップを含むループのJavascript for

これは(私はいつも「十年」の最初の6つの要素を必要とするので)私はサイズ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

A generator function中間結果を格納する必要がなくなります。この実装はBarmar's answerと同じですが、それらの特殊性から離れて

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));

:offset引数を導入すると、あなたは最初の5つの値0, 1, 2, 3, 4, 5をスキップすることができます。

関連する問題