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

JavaScript实现罗马数字转整数时console.log无输出问题排查

问题排查与修正

核心错误清单

  • 对象键重复&映射错误:重复定义了IV键,后定义的IV:9会覆盖之前的IV:4,数值9对应的正确罗马字符为IX。此外你注释的IL/IC/ID/IM都不是合法罗马特殊组合,合法的特殊组合仅为IV、IX、XL、XC、CD、CM6种
  • 逻辑方向倒置:你当前写的是「整数转罗马数字」的逻辑,但题目要求是「罗马数字转整数」。入参s是输入的罗马字符串,你直接用字符串和数值做比较,JS会隐式转换为NaN,所有比较结果都是false,自然不会进入while分支;如果你没有主动调用过romanToNum函数,for循环根本不会执行,console.log自然没有任何输出
  • 逻辑缺陷:for...in遍历对象的默认顺序不符合数值从大到小的要求,同时函数末尾没有返回计算结果,执行后拿不到返回值

罗马数字转整数 正确实现

function romanToInt(s) {
  const romanMap = {
    'I': 1,
    'V': 5,
    'X': 10,
    'L': 50,
    'C': 100,
    'D': 500,
    'M': 1000
  };
  let result = 0;
  for (let i = 0; i < s.length; i++) {
    // 当前位数值小于下一位时做减法,否则做加法
    if (i < s.length - 1 && romanMap[s[i]] < romanMap[s[i+1]]) {
      result -= romanMap[s[i]];
    } else {
      result += romanMap[s[i]];
    }
  }
  return result;
}

// 调用示例,主动调用后才会触发函数内部逻辑
console.log(romanToInt('III')) // 输出3
console.log(romanToInt('IV')) // 输出4
console.log(romanToInt('MCMXCIV')) // 输出1994

如果你需要的是整数转罗马数字的修正版

function intToRoman(num) {
  // 按数值从大到小排序,避免遍历顺序错误
  const valueMap = [
    ['M', 1000],
    ['CM', 900],
    ['D', 500],
    ['CD', 400],
    ['C', 100],
    ['XC', 90],
    ['L', 50],
    ['XL', 40],
    ['X', 10],
    ['IX', 9],
    ['V', 5],
    ['IV', 4],
    ['I', 1]
  ];
  let result = '';
  for (const [char, value] of valueMap) {
    while (num >= value) {
      result += char;
      num -= value;
    }
  }
  return result;
}

console.log(intToRoman(3)) // 输出III
console.log(intToRoman(1994)) // 输出MCMXCIV

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:54:04