我想"镜像" (就像在镜子中看到的)一个二维阵列。 该数组看起来像这样:
array1 = [
['a','b','c'],
['d','e','f'],
['g','h','i'],
['j','k','l']
];
我想创建一个新的数组,其中包含值"镜像"第一个数组值,如:
array2 = [
['a','e','i'],
['b','f','j'],
['c','g','k'],
['d','h','l']
];
使用reverse()尝试了几件事,但我找不到解决方案。
修改:在这种情况下"镜像"意味着与克莱默规则相似的东西: http://www.1728.org/cramer4d.png(见对角线)
编辑:我的不好,我应该对我的帖子进行防复制。 第二个数组应该是:
array2 = [
['a','d','g','j'],
['b','e','h', 'k'],
['c','f','i', 'l']
];
答案 0 :(得分:2)
基本思想是使数组数组变平,像这样Array.prototype.reduce
var array1 = [
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
['j', 'k', 'l']
];
var flatArray = array1.reduce(function(result, currentArray) {
return result.concat(currentArray);
}, []);
console.log(flatArray);
# [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' ]
然后,对于每个元素,在单个数组的长度之后获取元素,如此
var rows = array1.length,
cols = array1[0].length + 1,
result = [];
for (var i = 0; i < rows; i += 1) {
var temp = [];
for (var j = 0; j < cols - 1; j += 1) {
temp.push(flatArray[i + (j * cols)]);
}
result.push(temp);
}
console.log(result);
<强>输出强>
[ [ 'a', 'e', 'i' ],
[ 'b', 'f', 'j' ],
[ 'c', 'g', 'k' ],
[ 'd', 'h', 'l' ] ]