You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript入门问题:数组与map方法实现相邻元素求和

解决数组元素与下一个元素相加的问题

嘿,很高兴看到你在练习JavaScript数组操作!你遇到的这个NaN问题其实是数组遍历里的常见小坑,咱们一步步来理清它,再找到更优的实现方式~

为什么会出现NaN?

你用map遍历数组时,map会处理数组的每一个元素。当遍历到最后一个元素(索引4)时,numbers[index + 1]就是numbers[5]——而你的数组只有5个元素(索引0到4),所以这个位置的值是undefined。数字和undefined相加就会得到NaN,这就是问题所在。

方案一:在map中添加判断(最直观)

我们可以在map的回调函数里,检查当前元素是不是最后一个。如果是,直接返回它本身;如果不是,就和下一个元素相加。这里还可以用到map的第三个参数arr(就是原数组本身),让代码更灵活:

var numbers = [1, 3, 5, 10, 11];
var result = numbers.map((x, index, arr) => {
  // 最后一个元素的索引是 arr.length - 1,所以 index 小于这个值时才有下一个元素
  if (index < arr.length - 1) {
    return x + arr[index + 1];
  } else {
    return x; // 最后一个元素直接返回自身
  }
});
console.log(result); // 输出:[4, 8, 15, 21, 11]

方案二:拆分处理(更清晰的分步逻辑)

如果你觉得判断逻辑有点绕,也可以把数组拆成两部分处理:

  1. 先处理前n-1个元素(每个和下一个相加)
  2. 再把最后一个元素拼接到结果里

用slice(0, -1)可以快速获取到数组除了最后一个元素之外的所有元素,然后用concat拼接最后一个元素:

var numbers = [1, 3, 5, 10, 11];
// 处理前4个元素,每个与下一个相加
var summedPart = numbers.slice(0, -1).map((x, index) => x + numbers[index + 1]);
// 拼接最后一个元素
var result = summedPart.concat(numbers[numbers.length - 1]);
console.log(result); // 输出:[4, 8, 15, 21, 11]

哪种方式更优?

对于你的需求来说,第一种方案更简洁,一步就能完成,还能帮你熟悉map的完整参数用法;第二种方案拆分了逻辑,适合新手理解数组的截取和拼接操作。两种方式都能达到预期效果,你可以根据自己的理解习惯选择~

另外要记住:数组的索引是从0开始的,最后一个元素的索引永远是数组长度 - 1,这个小细节能帮你避免很多类似的数组遍历问题哦!

内容的提问来源于stack exchange,提问作者Thor Christensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:37:53