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

如何逐个比较数组元素并生成myNums数组求和?函数故障求助

问题分析与正确实现

给定数组:

let a = [33, 15, 67, 203450, 212]

需求:依次比较数组中每一对相邻元素(前一个与后一个),根据比较结果向myNums数组添加对应值:

  • 后一个元素 > 前一个元素:添加2
  • 后一个元素 < 前一个元素:添加1
  • 两者相等:添加0
    最终计算myNums数组中所有元素的总和。

原有函数的问题分析

第一个函数

  • myNums数组和求和变量sum定义在for循环内部,每次循环都会被重置,无法累计所有结果。
  • 循环第一次执行就触发return sum,直接退出函数,仅处理了第一对元素。
  • 循环条件c < cmp.length会导致最后一次循环时cmp[c+1]为undefined,引发无效比较。

第二个函数

  • while ((c = 0) && (c < cmp.length))中,c = 0是赋值操作而非判断,且逻辑与&&左侧为0(布尔值false),循环根本不会执行。
  • 内部嵌套的while循环是死循环:A和B的值不会改变,一旦进入就会持续向数组push元素。
  • c++写在循环外部,永远无法执行到。

第三个函数

  • switch(B)的用法错误:switch是匹配表达式的具体值,而case后的A < B等是布尔值,与B的数值类型不匹配,不会进入任何分支。
  • 所有case都没有break,即使匹配也会执行后续所有分支。
  • 第一次循环就return C,仅处理了第一对元素,无法完成所有比较。

正确实现方式

方式一:先构建数组再求和

function calculateSum(arr) {
    const myNums = [];
    // 循环到倒数第二个元素,避免索引越界
    for (let i = 0; i < arr.length - 1; i++) {
        const prev = arr[i];
        const next = arr[i + 1];
        
        if (next > prev) {
            myNums.push(2);
        } else if (next < prev) {
            myNums.push(1);
        } else {
            myNums.push(0);
        }
    }
    // 使用reduce计算总和
    return myNums.reduce((total, num) => total + num, 0);
}

const a = [33, 15, 67, 203450, 212];
console.log(calculateSum(a)); // 输出:6

方式二:直接累加(无需存储数组)

如果不需要保留myNums数组,直接计算总和更高效:

function calculateSum(arr) {
    let sum = 0;
    for (let i = 0; i < arr.length - 1; i++) {
        const prev = arr[i];
        const next = arr[i + 1];
        
        if (next > prev) {
            sum += 2;
        } else if (next < prev) {
            sum += 1;
        }
        // 相等时加0,无需额外处理
    }
    return sum;
}

const a = [33, 15, 67, 203450, 212];
console.log(calculateSum(a)); // 输出:6

内容的提问来源于stack exchange,提问作者Gor Janikyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:50:02