【问题标题】:Initializing and filling multi dimension array in javascript在javascript中初始化和填充多维数组
【发布时间】:2018-01-31 03:56:40
【问题描述】:

我们如何初始化和创建新的多维数组?

假设我想初始化一个 4x4 多维数组并用 0 填充它

理想情况下,在二维数组中,我们会这样做

let oned_array = new Array(10).fill(0); // 将创建大小为 10 的数组并用 0 填充它

我该怎么做 [[0,0], [0,0]] (2x2 矩阵)

let matrix = new Array([]).fill(0); 

我正在尝试解决一些算法问题,这需要我创建一个新的多维数组并遍历它们(岛屿问题等)

请指教。

编辑:

我找到的另一个解决方案:

Array(2).fill(0).map(_ => Array(2).fill(0));

【问题讨论】:

  • 你知道推荐的标识符名称格式[a-zA-z][a-zA-Z0-9_]+
  • @Redo 感谢您的回复。能否进一步说明?我试图理解你所说的“标识符名称格式”是什么意思,你能举个例子吗?
  • 他的意思是你不能以数字开头的变量名。
  • 避免使用以非字母字符开头的变量,例如1Darray。大多数语言都会给你错误

标签: javascript arrays multidimensional-array


【解决方案1】:

@NinaScholz 的答案要好得多——一如既往——但我在看到答案之前写完了这篇文章,所以还是决定发帖。

类似的想法,但没有使用Array.from。它创建一个指定长度的新数组,用 0 填充它以便可以迭代,迭代它以用指定长度填充指定值的新数组替换 0。

    
const buildMatrix = (l, h, v) => Array(l).fill(0).map(_ => Array(h).fill(v));
const matrix = buildMatrix(4,4,4);
matrix[0][0] = 0;
console.log(matrix);
.as-console-wrapper { max-height: 100% !important; }

【讨论】:

  • 感谢您的帖子。我可以把这个重新写到var test2 = new Array(2).fill(new Array(2).fill(0))
  • 应该是Array(2).fill(0).map(_ => Array(2).fill(0)); 映射很重要,否则它会用对同一数组的引用填充数组,而不是为每个元素创建一个新数组。
【解决方案2】:

要获得一个独立的填充数组,您可以使用Array.from 并使用映射值映射一个新数组。

var array = Array.from({ length: 4 }, _ => Array.from({ length: 4 }, _ => 4));

array[0][0] = 0;
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 我们可以做类似`a = Array(5).fill(0).map(x => Array(10).fill(0))`的事情吗?但我的问题不是循环一个数组并创建另一个数组,难道我们不能有一个像 .fill 这样的简写来创建/填充多维数组吗?
  • 实际上fill 为每个元素使用一个值,如果这是一个数组,则插入相同的对象引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多