JavaScript中的2维数组“镜像”

时间:2014-10-19 07:56:38

标签: javascript arrays

我想"镜像" (就像在镜子中看到的)一个二维阵列。 该数组看起来像这样:

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']
];

1 个答案:

答案 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' ] ]