为什么在 JavaScript 中迭代嵌套数组时不需要额外的 for 循环和 else 语句?

问题描述 投票:0回答:1

我正在 freeCodeCamp.com 上进行挑战,以提高我的编码知识。目前正在研究我的 JavaScript 算法和数据结构。

以下是提示以及我解决问题的方法:

提示:

我们定义了一个函数

filteredArray
,它接受嵌套数组
arr
elem
作为参数,并返回一个新数组。
elem
表示一个元素,可能出现在
arr
内嵌套的一个或多个数组中,也可能不出现。使用 for 循环修改该函数,以返回传递数组的过滤版本,以便删除嵌套在
arr
中且包含
elem
的任何数组。

我的解决方案:

function filteredArray(arr, elem) {
  let newArr = [];
  // Only change code below this line
  for (let i = 0; i < arr.length; i++) {
    if (arr[i].indexOf(elem) == -1) {
      newArr.push(arr[i]);
    }
  };
  // Only change code above this line
  return newArr;
}
console.log(filteredArray([
  [3, 2, 3],
  [1, 6, 3],
  [3, 13, 26],
  [19, 3, 9]
], 3));

我的问题:不存在“问题”。我只是想要一些学习理解。我了解问题的根源和正在发生的事情,并且我了解我的解决方案。我不明白的是我们如何仅使用一个 for 循环来迭代嵌套数组。据我了解,对于以下数组:

[[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]]

如果我使用:

for (i = 0; i < arr.length; i++) {
};

我们正在遍历数组到每个子数组。但要迭代子数组,我们必须嵌套一个额外的 for 循环:

for (let i = 0; i < arr.length; i++) {
  for (let j = 0; i < arr[i].length; i++) {
  };

这样做之后,使用 if/else 语句就有意义了。如:

if (arr[j].indexOf(elem) > 0) {
  return newArr.pop(arr[i]
  } else {
  return newArr.push[i]
};

总而言之,我想我不明白为什么第二个for循环和else语句是不必要的。也许我错过了一些东西。如果可以的话请提供一些指导。提前致谢。 `

javascript arrays for-loop if-statement multidimensional-array
1个回答
0
投票

正如评论中提到的,内置的 Javascript 数组方法可以自行迭代。例如,这里是几乎相同的解决方案,但使用 .includes() 而不是 .indexOf():

function filteredArray(arr, elem) {
  let newArr = [];
  for (let i = 0; i < arr.length; i++) {
    if (!arr[i].includes(elem)) {
      newArr.push(arr[i])
    }
  }
  return newArr;
}
© www.soinside.com 2019 - 2024. All rights reserved.