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

JavaScript实现奇偶数字间插指定符号(排除0)及代码问题修复

问题分析与解决方案

原代码的两个核心问题

  1. 开头多余横杠:循环从i=0开始,此时previous_number为undefined,进入判断分支后,undefined%2得到NaN,因NaN的比较特性意外触发了符号插入逻辑。正确做法是先添加第一个字符,从第二个字符开始循环比较。
  2. 0的逻辑未生效:原代码用current_number === 0判断0,但current_number是字符串类型(如'0'),与数字0全等比较结果为false,导致0的判断逻辑失效。需改为字符串比较current_number === '0',或转为数字后判断。

修正后的代码

function StringChallenge(num) {
    let newString = num.toString();
    // 先添加第一个字符,避免处理无前置字符的情况
    let result = newString[0];
   
    // 从第二个字符开始循环(i=1)
    for (let i = 1; i < newString.length; i++) {
        let previousNum = newString[i-1];
        let currentNum = newString[i];

        // 判断当前或前一个字符是0(用字符串比较)
        if (currentNum === '0' || previousNum === '0') {
            result += currentNum;
            continue;
        }

        // 转为数字判断奇偶
        let prev = Number(previousNum);
        let curr = Number(currentNum);

        if (prev % 2 === 0 && curr % 2 === 0) {
            result += "*" + currentNum;
        } else if (prev % 2 !== 0 && curr % 2 !== 0) {
            result += "-" + currentNum;
        } else {
            result += currentNum;
        }
    }
    return result;
}

console.log(StringChallenge(4005467930)); // 输出:40054*67-9-30

关键修正点说明

  • 初始化处理:直接将第一个字符赋值给result,循环从i=1开始,彻底避免第一个字符前插入多余符号的问题。
  • 0的判断逻辑:改为字符串比较currentNum === '0',确保识别到字符'0';也可以用Number(currentNum) === 0,效果一致。
  • 类型转换:将字符串形式的数字转为数字类型后再判断奇偶,显式转换让逻辑更清晰,避免隐式转换的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:40:49