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

JavaScript统计打破记录次数异常:预期3次却输出2次求助

问题排查与修复

问题根源

你的代码把分割后的字符串直接拿来比较,而字符串比较是按字符的Unicode码点逐个对比,不是数值大小对比。比如:

  • 当循环到第3个元素"8"时,字符串"8"的第一个字符'8'的码点(56)比"12"的第一个字符'1'的码点(49)大,代码会错误判定"8">"12",把bestPoint更新为"8"。
  • 后续的"15"和"20"作为字符串,第一个字符'1'、'2'的码点都比'8'小,无法触发记录打破的条件,最终统计结果只有2次。

修复方案

把分割后的字符串数组转换成数值数组,确保是数值大小对比。有两种常见方式:

方式1:分割后直接转数值

function gameHistory(gamePoints){
    // 分割后用map(Number)转成数值数组
    let points = gamePoints.split(", ").map(Number);
    let recordBreak = 0;
    let bestPoint = points[0];

    for(let i = 1; i<points.length; i++){
        if(points[i]>bestPoint){
            bestPoint = points[i];
            recordBreak += 1;
        }
    }
    console.log(recordBreak);
    return recordBreak;
}

gameHistory("10, 12, 8, 15, 20"); // 输出3,符合预期

方式2:比较时临时转数值

function gameHistory(gamePoints){
    let points = gamePoints.split(", ");
    let recordBreak = 0;
    // 初始值转成数值
    let bestPoint = Number(points[0]);

    for(let i = 1; i<points.length; i++){
        // 当前元素转成数值再比较
        if(Number(points[i])>bestPoint){
            bestPoint = Number(points[i]);
            recordBreak += 1;
        }
    }
    console.log(recordBreak);
    return recordBreak;
}

gameHistory("10, 12, 8, 15, 20"); // 输出3,符合预期

修复后执行流程

  1. 转换后的数值数组为[10,12,8,15,20]
  2. 初始bestPoint=10,recordBreak=0
  3. i=1:12>10 → 记录+1(变为1),更新bestPoint=12
  4. i=2:8<12 → 无操作
  5. i=3:15>12 → 记录+1(变为2),更新bestPoint=15
  6. i=4:20>15 → 记录+1(变为3),更新bestPoint=20
  7. 最终输出3,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:54:26