JavaScript中map函数传三参数处理三元素数组的结果疑问
问题原因及解决方法
你的问题核心是误解了Array.map()回调函数的参数含义。
先搞懂map的回调参数
map的回调函数接收三个固定参数,顺序是:
- 当前正在遍历的数组元素
- 当前元素的索引值(从0开始)
- 调用
map的原数组本身
而不是你以为的“把数组的三个元素分别传给三个参数”。
分析你得到的输出
你的代码里,每次遍历的参数实际是:
- 第一次遍历:
num1=1(元素)、num2=0(索引)、num3=[1,2,3](原数组)
返回[1*2, 0*3, [1,2,3]*4]→ 数组和数字相乘会得到NaN,所以结果是[2, 0, NaN] - 第二次遍历:
num1=2、num2=1、num3=[1,2,3]
返回[2*2,1*3, [1,2,3]*4]→[4, 3, NaN] - 第三次遍历:
num1=3、num2=2、num3=[1,2,3]
返回[3*2,2*3, [1,2,3]*4]→[6, 6, NaN]
这就是你看到输出的原因。
正确写法(两种常见需求)
需求1:给数组每个元素对应乘以2、3、4,得到[2,6,12]
const numbers = [1,2,3]; const multipliers = [2,3,4]; const result = numbers.map((num, index) => num * multipliers[index]); console.log(result); // 输出 [2,6,12]
需求2:对每个元素分别做×2、×3、×4,返回二维数组[[2,3,4],[4,6,8],[6,9,12]]
const numbers = [1,2,3]; const result = numbers.map(num => [num*2, num*3, num*4]); console.log(result);
内容的提问来源于stack exchange,提问作者SilkyTuba
相关产品推荐
相关产品推荐

