JavaScript实现adjacent_sum函数遇问题:逻辑与需求不符
问题分析与修复:
adjacent_sum 方法实现错误 问题根源
- 核心逻辑错误:你原本的思路是每次取数组前两个元素相加后移除它们,这直接导致相邻元素的配对逻辑完全偏离需求。比如处理
[3,7,2,11]时,第一次取3+7后移除前两个元素,剩下[2,11]再加2+11,最终得到[10,13],漏掉了7+2这个关键的相邻和。正确的逻辑应该是遍历数组,让每个元素和它紧邻的下一个元素相加,而非跳步移除元素。 - 语法错误:函数内
console.log(newArr)写在return newArr;之后,这行代码永远不会执行;同时函数末尾缺少闭合的},导致代码无法正常运行。
正确实现方式
方式1:for循环遍历(直观易懂)
function adjacent_sum(arr) { const newArr = []; // 遍历到倒数第二个元素即可,每个元素和下一个元素相加 for (let i = 0; i < arr.length - 1; i++) { newArr.push(arr[i] + arr[i + 1]); } return newArr; } console.log(adjacent_sum([3, 7, 2, 11])); // [10, 9, 13] console.log(adjacent_sum([2, 5, 1, 9, 2, 4])); // [7, 6, 10, 11, 6]
方式2:使用Array.map(简洁写法)
function adjacent_sum(arr) { // 截取前arr.length-1个元素,每个元素和下一个位置的元素相加 return arr.slice(0, -1).map((num, index) => num + arr[index + 1]); } console.log(adjacent_sum([3, 7, 2, 11])); // [10, 9, 13] console.log(adjacent_sum([2, 5, 1, 9, 2, 4])); // [7, 6, 10, 11, 6]
逻辑说明
两种实现都是依次取数组中索引为 i 和 i+1 的元素相加,覆盖了所有相邻元素的配对(从第0个与第1个,直到倒数第二个与最后一个),最终得到的新数组长度正好是原数组长度减1,完全符合需求。
内容的提问来源于stack exchange,提问作者larryfly
相关产品推荐
相关产品推荐

