2016-11-24 5 views
3

この最初の2次元配列を皮切り:定義された数にインクリメントして0にリセットし、再度インクリメントする3D配列をプログラムで作成する方法はありますか?

var fullArray = [ 

[[2,3],[6,7],[4,5],[1,2],[5,6],[2,3]], 

[[3,4],[0,1],[5,6],[2,3],[6,7],[3,4]], 

[[4,5],[1,2],[6,7],[3,4],[0,1],[4,5]], 

[[5,6],[2,3],[0,1],[4,5],[1,2],[5,6]], 

[[6,7],[3,4],[1,2],[5,6],[2,3],[6,7]], 

[[0,1],[4,5],[2,3],[6,7],[3,4],[0,1]], 

[[1,2],[5,6],[3,4],[0,1],[4,5],[1,2]], 

[[2,3],[6,7],[4,5],[1,2],[5,6],[2,3]], 

[[3,4],[0,1],[5,6],[2,3],[6,7],[3,4]], 

[[4,5],[1,2],[6,7],[3,4],[0,1],[4,5]], 

[[5,6],[2,3],[0,1],[4,5],[1,2],[5,6]] 

]; 

パターンを参照してください:

var initialArray = [[2,3],[6,7],[4,5],[1,2],[5,6],[2,3]]; 

私はプログラム的に、この3D配列を作成する必要がありますか?

各ペアでは、[0]の位置は6(任意の開始番号< = 6)から6に増分し、0にリセットしてからインクリメントを続行する必要があります。同様に、[1]の位置は(開始番号< = 7から)7に増分し、1にリセットしてからインクリメントを続ける必要があります。

この例では、fullArrayには10個の2D配列が含まれています。しかし、私はこの数字を変数にする必要があります。このような何か:

var numberOf2DArraysInFullArray = 12; 

さらにinitialArray値は次のように再配置することができるように、初期アレイは柔軟でなければならない(ただし、上述した同じ反復フォロースルールール):

var initialArray = [[6,7],[2,3],[5,6],[4,5],[1,2],[6,7]]; 

任意プログラムでこの構造を作成する方法についての考え? これを元通りに引き抜く方法が不足しています。 フィードバックが非常に高く評価されました!

答えて

1

はここで解決策だ、私は方法を分けてきたが、代わりにペアで、それはNサイズの配列だとあなたはそれがあなたができる必要はない場合[2]は、8まで増加し、2にリセットしたい場合、私はそれを作りましたループfor(var j = 0; j < innerArray.length; j++)

var initialArray = [[2,3],[6,7],[4,5],[1,2],[5,6],[2,3]]; 
 
var create3DArray = function(array, size){ 
 
    var newArray = [initialArray]; 
 
    for(var i = 0; i < size; i++) 
 
    { 
 
    newArray.push(getNextArrayRow(newArray[i])); 
 
    } 
 
    return newArray; 
 
} 
 
var getNextArrayRow = function(array){ 
 
    var nextRow = []; 
 
    for(var i = 0; i < array.length; i++) 
 
    { 
 
    var innerArray = array[i]; 
 
    var nextElement = []; 
 
    for(var j = 0; j < innerArray.length; j++) 
 
    { 
 
     var value = (innerArray[j] + 1) % (7 + j); 
 
     value = value === 0 ? j : value; 
 
     nextElement.push(value); 
 
    } 
 
    nextRow.push(nextElement); 
 
    } 
 
    return nextRow; 
 
} 
 
console.log(create3DArray(initialArray,3));

注の簡素化、スニペットを実行した結果は...

0

var initialArray = [[2,3],[6,7],[4,5],[1,2],[5,6],[2,3]]; 
 
var numOfArrays = 10; 
 

 
// get a range array [0, 1, 2, ...] 
 
var range = []; 
 
for (var i = 0; i < numOfArrays; i++) { 
 
\t range.push(i); 
 
} 
 

 
var result = range.reduce(function(prev, index) { 
 
    if (index == 0) { 
 
    \t return prev; 
 
    } 
 
    prev.push(transformArray(prev[index - 1])); 
 
    return prev; 
 
}, [initialArray]) 
 

 
console.log(result); 
 

 
function transformArray(arr) { 
 
\t return arr.map(transformSubArray) 
 
} 
 

 
function transformSubArray(arr) { 
 
\t return arr.map(function(val) { 
 
    \t return val == 7 ? 0 : val + 1; 
 
    }) 
 
}
読みビットが困難です

はここで非常にシンプル機能っぽい実装

です
関連する問題