【问题标题】:2-dimensions array "mirroring" in JavaScript [duplicate]JavaScript中的二维数组“镜像”[重复]
【发布时间】:2014-12-14 10:12:47
【问题描述】:

我想“镜像”(就像在镜子中看到的那样)一个二维数组。 数组如下所示:

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

【问题讨论】:

  • @user2717954 看起来不像 OP 发布的问题。
  • 你确定输出不应该是一个 3x4 矩阵(那将是原始 4x3 矩阵的转置)
  • 我的错。在我的问题中解决了这个问题。
  • 现已测试,@user2717954 的链接解决了我的问题。谢谢!

标签: javascript arrays


【解决方案1】:

基本思路是把数组的数组展平,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' ] ]

【讨论】:

    猜你喜欢
    • 2013-01-08
    • 2016-08-03
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2013-03-09
    相关资源
    最近更新 更多