如何以编程方式创建增量到定义数字的3D数组,重置为零,并再次递增?

时间:2016-11-24 02:03:27

标签: javascript arrays multidimensional-array

从这个初始的2D数组开始:

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

我需要以编程方式创建这个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]]

];

看模式?

在每对上,[0]位置应增加到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]];

有关如何以编程方式创建此结构的任何想法? 难以理解如何优雅地将其拉下来。 反馈非常感谢!

2 个答案:

答案 0 :(得分:1)

这是一个解决方案,我已经分离了这些方法,并且我这样做了,如果不是成对的话,它是一个N大小的数组,你希望[2]增加到8并重置为{ {1}},如果不需要,可以简化循环2

for(var j = 0; j < innerArray.length; j++)

注意,运行代码段的结果有点难以理解......

答案 1 :(得分:0)

&#13;
&#13;
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++) {
	range.push(i);
}

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

console.log(result);

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

function transformSubArray(arr) {
	return arr.map(function(val) {
  	return val == 7 ? 0 : val + 1;
  })
}
&#13;
&#13;
&#13;

这是一个非常简单的功能实现