数组的多维数

时间:2018-10-19 18:11:27

标签: javascript arrays

我必须制作一个2维数组,其中包含从1到height ^ 2迭代的数字。 输入为高度,如果高度为5,则输出为:

[ [ 21, 22, 23, 24, 25 ],
  [ 20, 19, 18, 17, 16 ],
  [ 11, 12, 13, 14, 15 ],
  [ 10, 9, 8, 7, 6 ],
  [ 1, 2, 3, 4, 5 ] ]

我已经在这里进行了编码:

function snakeLadder(height) {

  for (var i = 1; i <= height; i++) {
    var output = [];
    for (var j = 1; j < height; j++) {
      output.push(i + j);
    }
  }
  return output;
}

和输出结果像这样:

[ 6, 7, 8, 9, 10 ]
[ 4, 5, 6 ]
[ 3, 4 ]

谁能在我的代码中指出问题所在?

4 个答案:

答案 0 :(得分:0)

您需要一个外部数组,您可以在其中移动行。

然后最好从零循环到小于height,并乘以高度和偏移量1以获得正确的值。

function snakeLadder(height) {
    var temp, result = []
    for (var i = 0; i < height; i++) {
        temp = [];
        for (var j = 0; j < height; j++) {
            temp.push(i * height + j + 1);
        }
        if (i & 1) {
            temp.reverse();
        }
        result.unshift(temp);
    }
    return result;
}

console.log(snakeLadder(5).map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

function snakeLadder(height) {
  var result = []
  for(var i = height-1; i >= 0; i--) {
    var row = [];
    for(var j = 1; j <= height; j++) {
      // if it's odd rows, increase(push), otherwise decrease(unshift)
      if((height-i-1)%2 == 0)
        row.push(height*i + j);
      else
        row.unshift(height*i + j);
    }
    result.push(row);
  }
  return result;
}
console.log(snakeLadder(5));

答案 2 :(得分:0)

代码的主要问题是未将行添加到最终结果数组中。其次,您需要反转奇数行以匹配您的预期输出。

这是一个简洁的ES6版本,它在...构造函数上使用Array扩展运算符来创建行和列,并将其映射到二维结果数组。使用二进制j在行索引& 1上对奇偶校验进行测试,以反转设置了最低有效位的行:

const snakeLadder = (h, i=h*h) => 
  [...Array(h)].map((r, j) => {
    const row = [...Array(h)].map(c => i--)
    return j & 1 ? row : row.reverse();
  })
;

console.log(snakeLadder(5));

答案 3 :(得分:0)

尝试一下:

  for (var i = 0; i < height; i++) {
      var output = [];
          if((i+2)%2 ==0){
                for (var j = 1; j <=height; j++) {
                          output.push( (i * height ) + j );
                }
          }
          else if( (i%2) ==1){
                 for (var j = height; j>0; j--) {
                           output.push( (i * height) + j );
                }
          }
     }
            return output;
    }