从这个初始的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]];
有关如何以编程方式创建此结构的任何想法? 难以理解如何优雅地将其拉下来。 反馈非常感谢!
答案 0 :(得分:1)
这是一个解决方案,我已经分离了这些方法,并且我这样做了,如果不是成对的话,它是一个N大小的数组,你希望[2]
增加到8
并重置为{ {1}},如果不需要,可以简化循环2
for(var j = 0; j < innerArray.length; j++)
注意,运行代码段的结果有点难以理解......
答案 1 :(得分: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++) {
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;
这是一个非常简单的功能实现