我经常在面试中问候:你能用 JavaScript 生成一个二维数组吗?这个问题看似简略,实际上却能提醒出面试者对 JavaScript 的熟练程度。就像茴字有多种写法相同,生成二维数组也有多种办法。今日,就让咱们一同来探索这个问题背面的答案,揭开生成二维数组的多种秘密。

把握不同的办法不仅能让咱们在面临不同的场景时愈加得心应手,还能在面试中展现咱们对 JavaScript 的深入了解。毕竟,在编程世界里,灵敏多变往往比死记硬背更为重要。

主张大家在阅读文章时,关于每个办法先不要看答案,而是先自己考虑怎么完成,这样会更有收成。

创立一维数组

在生成二维数组之前,咱们先来学习怎么创立一维数组。创立一维数组的办法有多种,以下是一些常见的办法:

1. 数组字面量

这是创立数组的最简略办法,直接运用方括号[]来定义数组。

let arr = [1, 2, 3];

2. 运用 Array 结构函数

上面的数组也能够运用 Array 结构函数来创立。

let arr = new Array(1, 2, 3);

但当运用 Array 结构函数时,需求注意,假如只传入一个参数,则表明数组的长度。假如想要创立包含单个元素的数组,除了运用上面的办法外,还能够运用 Array.of() 办法。当有多个参数时,Array.of 和 Array 结构函数的作用是相同的。

let arr = Array.of(2);
console.log(arr); // [2]

能够运用这种 Array 结构函数来创立一个指定长度的数组。但需求注意的是,这种办法创立的数组元素是空位,并不是 undefined。

let arr = new Array(3);
console.log(arr); // [empty  3]

为了防止空位的问题,能够结合运用 Array.fill() 办法来填充数组:

let arr = new Array(3).fill(0);
console.log(arr); // [0, 0, 0]

3. 运用 Array.from()

Array.from() 办法能够从一个类数组或可迭代目标创立一个新的数组实例。它还能够接受一个映射函数作为第二个参数,用于初始化数组元素。

let arr = Array.from({ length: 3 }, () => 0);
console.log(arr); // [0, 0, 0]

4. 运用打开运算符和 Array()

能够结合运用打开运算符(…)和 Array() 结构函数来创立并初始化数组。

let arr = [...Array(3)].map(() => 0);
console.log(arr); // [0, 0, 0]

把握这些创立一维数组的办法能够协助咱们更灵敏地处理各种编程场景。在接下来的部分,咱们将讨论怎么扩展这些办法来创立二维数组。

二维数组简介

二维数组,顾名思义,便是数组的数组。在 JavaScript 中,它能够用来表明矩阵、网格或任何需求行和列的数据结构。想象一下一个棋盘,每一行都是一个数组,整个棋盘便是一个二维数组。

二维数组在编程面试中经常出现,尤其是在处理矩阵相关的问题时。例如:

  1. 矩阵相关: 给定一个 n x n 的二维矩阵,要求原地旋转 90 度。
  2. 岛屿数量: 给定一个由’1’(陆地)和’0’(水)组成的二维网格,计算岛屿的数量。
  3. 动态规划: 求解最大子数组和问题。

把握二维数组的操作关于处理这些问题至关重要,因此了解怎么在 JavaScript 中有效地生成和操作二维数组是非常有用的。

生成二维数组的办法有很多,今日咱们将讨论以下几种,并分析其优缺点:

  1. 运用嵌套循环
  2. 运用 Array.from()
  3. 运用 Array.fill() 和 map()
  4. 运用打开运算符和 map()

1. 运用嵌套循环

这是最直接的办法。先创立一个外层数组,然后在每个位置上创立一个内层数组。

function create2DArray(m, n) {
  let arr = new Array(m);
  for (let i = 0; i < m; i++) {
    arr[i] = new Array(n);
    for (let j = 0; j < n; j++) {
      arr[i][j] = 0; // 或其他初始值
    }
  }
  return arr;
}

长处:直观易懂。
缺点:代码稍显冗长。

2. 运用 Array.from()

Array.from() 能够依据给定的参数创立一个新数组,而 map() 则能够对数组的每个元素进行处理。

function create2DArray(m, n) {
  return Array.from({ length: m }, () => Array.from({ length: n }, () => 0));
}

长处:代码更简练。
缺点:关于初学者来说,或许需求一些时刻来了解这种写法。

3. 运用 Array.fill() 和 map()

类似于上一个办法,但是运用了 Array.fill() 来创立初始数组。

function create2DArray(m, n) {
  return Array(m)
    .fill()
    .map(() => Array(n).fill(0));
}

长处:非常简练。
缺点:与上一个办法相似,对初学者或许有一定难度。

4. 运用打开运算符和 map()

打开运算符(…)能够用来打开数组,与 map() 结合运用能够创立二维数组。

function create2DArray(m, n) {
  return [...Array(m)].map(() => Array(n).fill(0));
}

长处:代码简练,易于了解。
缺点:性能或许略逊于其他办法。

总结

每种办法都有其优缺点,挑选哪一种取决于你的具体需求和个人喜爱。假如你追求代码的简练性,那么运用 Array.from() 或许是一个不错的挑选。假如你更倾向于易于了解和保护的代码,那么运用嵌套循环或许更适合你。

把握生成二维数组的多种办法是每个 JavaScript 开发者的必备技术。通过这些办法,咱们能够灵敏地处理各种数据结构和算法问题。期望这篇文章能协助你更好地了解和运用这些技巧。下次面试的时候,当这个问题再次出现时,你将满怀信心地给出答案。

我的推荐写法

在所有办法中,我个人偏好运用 Array.from() 的办法,由于它非常强壮。当然 Array.fill 办法也非常不错,其长处是语义化,代码更易读。

function create2DArray(m, n) {
  return Array.from({ length: m }, () => Array.from({ length: n }, () => 0));
}
function create2DArray(m, n) {
  return Array(m)
    .fill()
    .map(() => Array(n).fill(0));
}

感谢大家阅读这篇文章!把握 JavaScript 中生成二维数组的多种办法能够协助咱们在面临不同编程挑战时愈加挥洒自如。每种办法都有其独特之处,你最喜欢哪一种呢?欢迎在谈论区沟通你的想法和经历,让咱们一同进步!

原创不易,求分享、求一键三连