JavaScript 中的 Array.map() 与 Array.forEach()

文章对比了JavaScript中遍历数组的两种常见方法——Array.map()和Array.forEach()。map()方法用于创建新数组,保留原数组不变,适合需要处理后返回数组的场景,如React组件渲染。forEach()方法不返回新数组,常用于执行操作但不构建新数组的情况,如打印或副作用操作。在React组件渲染时,应使用map()而不是forEach()。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在 JavaScript 中遍历数组 ,最常见的有两种方法

  • 使用 Array.map()
  • 使用 Array.forEach()

这两种方法都可以让您遍历数组并对数组元素执行操作。但是您需要记住这些方法之间的一些关键区别。 因此,您需要根据情况决定在这两种方法中使用哪种方法。

在本文中,我将解释这两种方法以及您可以使用它们的用例。

Array.map()

map() 方法允许您创建一个新数组,其中填充了对调用数组中的每个元素调用提供的回调函数的结果。

下面是 map() 方法的定义。

map(function(element, index, array) { /* ... */ 
}, thisArg) 

map() 中的回调函数将始终使用三个参数调用。

  • 元素的值
  • 元素的索引
  • 正在遍历的 Array 对象

如果我们想显式地向方法提供 this 值,我们可以使用 thisArg 参数来实现。

因此,假设有一个名为 numbers 的数组,我们可以像这样使用 map() 方法遍历该数组。

const numbers = [1, 2, 3, 4];

// 接收数组的每一个参数
// 将他们乘以2
// 返回一个新的数组是他们的结果
const mapNumbers = numbers.map(function(number) {return number * 2;
});

console.log(mapNumbers);
// [2, 4, 6, 8] 

map() 方法将遍历 numbers 数组,调用每个数组元素上提供的回调函数,并返回一个全新的数组。

这里要注意的一件事是, map() 不会改变原始数组。因此,数字数组保持不变。

何时使用 Array.map()

在您要使用该方法返回的数组的情况下,您应该使用 map() 方法。

以下面的 React 组件为例。

export default function App() {const posts = [{ id: 1, title: "Hello World",},{ id: 2,title: "Hello China", }];const sidebar = posts.map((post) => (<li key={post.id}>{post.title}</li>));console.log(sidebar);return (<div><ul> {sidebar}</u></div>);
} 

在此示例中,我们有一个名为 posts 的对象数组,我们要渲染这些对象。因此,在这种情况下,我们可以使用 map() 方法,因为我们希望将返回的数组分配给 sidebar 变量。

然后 React 遍历这个数组并使用 props.children 来呈现所需的输出。

在这种情况下, map() 应该是您的“首选”方法。

什么时候不使用 Array.map()

什么时候不使用 Array.map() 。答案很简单。如果您不使用它返回的数组,则不应使用此方法。您应该完全避免使用 map()

Array.forEach() 方法

forEach() 方法允许您遍历数组并为每个数组元素执行一次提供的函数,与 map() 方法完全一样。但是有一些区别。

  • 它不会返回一个新数组。
  • 它将始终返回 undefined

下面是 forEach() 方法的定义。

forEach(function(element, index, array) { /* ... */ 
}, thisArg) 

forEach() 中的回调函数将始终使用三个参数调用。

  • 元素的值
  • 元素的索引
  • 正在遍历的 Array 对象

如果我们想显式地向方法提供 this 值,我们可以使用 thisArg 参数来实现。

下面是一个演示 forEach() 方法用法的简单示例。

const numbers = [1, 2, 3, 4];
const mapNumbers = [];

// 接收数组的每一个参数
// 将他们乘以2
// 并将他们打印出来
numbers.forEach(function(number) {mapNumbers.push(number * 2);
});

console.log(mapNumbers);
// [ 2, 4, 6, 8 ] 

由于 forEach() 方法不返回新数组,我们需要在回调函数中手动将数组元素推送到新创建的数组。

另请注意,我们在这里有效地改变了 mapNumbers 数组,这与 map() 方法不同,这并不总是一个好的做法。

何时使用 Array.forEach()

当您只想对数组元素执行某些操作时,您总是可以使用 forEach() 方法。例如,在您只想打印数组元素的情况下。

另一个用例是当您想要执行一些副作用(例如日志记录)时在链的末尾使用它。

什么时候不使用 Array.forEach()

当您需要返回新构造的数组时,您应该轻松地避免使用 forEach() 方法,因为该方法将始终返回 undefined 值。

所以,当你想在 React 组件中渲染数组元素时,你不能使用 forEach

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值