【问题标题】:How to fill multidimensional array in javascript?如何在javascript中填充多维数组?
【发布时间】:2022-01-19 01:05:10
【问题描述】:

我试图让它工作,但外部循环在第二次迭代后停止,并且它之后的所有内容都没有执行(就像它是脚本的结尾一样)。我想用任何字符填充二维数组(这里我以'q'为例)

var A=[[],[]];
for(var i=0;i<12;i++){
    for(var j=0;j<81;j++){
        A[i][j]='q';
    }
}

它不起作用,所以我输入了alert(i+' '+j); 以查看它是否正在执行,并且正如我之前所写的,它在外循环的第二次迭代后停止,然后忽略脚本的其余部分。

我想要的只是让这个数组在给定范围内填充相同的字符(在这种特定情况下为 12 行,81 列),所以如果这种方法没有希望,我会很高兴看到一个有效的方法.

【问题讨论】:

  • 您只用 2 个项目初始化 A。在询问为什么事情不工作之前,请务必检查您的控制台是否有错误。 Uncaught TypeError: Cannot set property '0' of undefined 创建一个数组以分配给外循环内的[i]
  • 一种简洁的方式类似于 const A = Array(12).fill(0).map(() => Array(81).fill("q"));

标签: javascript arrays loops


【解决方案1】:

Array.from() 方法创建一个新的、浅拷贝的 Array 实例 来自类似数组或可迭代的对象。

function createAndFillTwoDArray({
  rows,
  columns,
  defaultValue
}){
  return Array.from({ length:rows }, () => (
      Array.from({ length:columns }, ()=> defaultValue)
   ))
}

console.log(createAndFillTwoDArray({rows:3, columns:9, defaultValue: 'q'}))

【讨论】:

    【解决方案2】:

    var A=[[], []];

    ^ 这一行声明了一个大小为 1x2 的二维数组。试试这个:

    var A = [];
    for (var i = 0; i < 12; i++) {
        A[i] = [];
        for (var j = 0; j < 81; j++) {
            A[i][j] = 'q';
        }
    }
    

    【讨论】:

    • @MarkMeyer 当我重新格式化代码以使多行代码的堆栈溢出表单验证变得愉快时,我忘记了第三行的A[i] = []; :) 不错!
    • 听起来很慢,有没有更快的方法?
    【解决方案3】:

    这可以在一行中完成。

    var A = Array(12).fill(null).map(()=&gt;Array(81).fill('q'))

    正如 harunurhan 所说,这是一个参考数组和一个坏主意。

    var A = Array(12).fill(Array(81).fill('q'));

    【讨论】:

    • 在这种情况下,A 的所有元素都会引用同一个数组引用,因此修改 A[i][j] 也会修改 A[0...11][j]跨度>
    • 这里解释得很好medium.com/@wisecobbler/…
    【解决方案4】:

    由于fill() 是最简洁和直观的,并且它适用于不可变值,我更喜欢外部from() 和内部fill()

    Array.from({length: 12}, _ => new Array(81).fill('q'));
    

    【讨论】:

      【解决方案5】:

      你需要在每次第一个循环运行时为i初始化一个新数组,并且你不需要在创建它之前设置数组的布局(删除@987654323声明中的[], [] @)。试试这个:

      var A = [];
      for (var i = 0; i < 12; i++) {
        A[i] = [];
        for (var j = 0; j < 81; j++) {
          A[i][j] = 'q';
        }
      }
      console.log(A);
      .as-console-wrapper { 
          max-height: 100% !important; 
          top: 0; 
      }

      【讨论】:

        猜你喜欢
        • 2011-11-27
        • 2020-09-27
        • 1970-01-01
        • 2018-01-27
        • 2015-09-28
        • 2012-11-21
        • 2018-01-31
        • 2011-01-11
        相关资源
        最近更新 更多