likes
comments
collection
share

forEach和map的异同

作者站长头像
站长
· 阅读数 28

forEachmap 都是数组方法,用于遍历数组中的每个元素。尽管它们有相似之处,但它们的用法和目的有所不同。以下是它们的主要异同:

相同点

  1. 遍历数组forEachmap 都会遍历数组中的每个元素。
  2. 参数:这两个方法的回调函数都接受三个参数:当前元素 (element)、当前索引 (index) 和整个数组 (array)。

不同点

返回值

-   `forEach` 不返回任何值。它仅用于执行回调函数中的操作,而不会改变原数组或生成新的数组。
-   `map` 返回一个新数组,该数组包含回调函数对每个元素执行操作后的结果。

用途

-   `forEach` 更适合用于执行副作用,例如修改外部变量、记录日志或执行 I/O 操作。
-   `map` 更适合用于转换数组,即创建一个新数组,其中的每个元素都是根据原数组中的元素通过回调函数转换而来的。

可变性

-   `forEach` 允许修改原数组的元素,因为它不会返回新数组。
-   `map` 不会改变原数组,只会返回一个新数组。

示例

forEach 示例

const array = [1, 2, 3];
array.forEach((element, index, array) => {
  console.log(element * 2);  // 输出 2, 4, 6
});

map 示例

const array = [1, 2, 3];
const newArray = array.map((element, index, array) => {
  return element * 2;
});
console.log(newArray);  // 输出 [2, 4, 6]

总结

  • 如果你需要对数组中的每个元素执行操作,但不需要返回新数组,使用 forEach
  • 如果你需要将数组中的每个元素转换为新形式并返回新数组,使用 map

通过抛出错误跳出循环

forEach 示例

const array = [1, 2, 3, 4, 5];

try {
  array.forEach((element) => {
    if (element === 3) {
      throw new Error('Loop terminated');
    }
    console.log(element);
  });
} catch (e) {
  console.log(e.message); // 输出:Loop terminated
}
// 输出:1 2

map 示例

const array = [1, 2, 3, 4, 5];

try {
  const newArray = array.map((element) => {
    if (element === 3) {
      throw new Error('Loop terminated');
    }
    return element * 2;
  });
  console.log(newArray); // 如果没有错误,这行会被执行
} catch (e) {
  console.log(e.message); // 输出:Loop terminated
}
// 输出:1 2

注意事项

  1. 捕获错误:确保在外部捕获错误,否则程序会中断。
  2. 代码可读性:使用这种方式可能会使代码变得难以理解和维护。一般建议只在没有其他选择的情况下使用这种方法。
  3. 副作用:这种方法不仅会跳出循环,还会中断后续代码的执行,除非被捕获和处理。

总结

虽然可以通过抛出错误来中途跳出 forEachmap 循环,但这种方法不太常见,可能会导致代码的可读性和可维护性下降。在可能的情况下,建议使用 forfor...of 循环来实现相同的功能,因为它们可以更直接地跳出循环。

转载自:https://juejin.cn/post/7393533297895047219
评论
请登录