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

JavaScript数字集合对比代码含0匹配异常问题求助

问题分析与修复方案

问题根源

你的程序丢失前导零的核心原因是findMatches函数中的parseInt转换步骤:当输入像"031"这类带前导零的字符串时,parseInt(n)会将其转换为数字31,直接丢失了前导零的信息,导致后续字符对比和输出都无法保留0。

修复方案

不需要将输入字符串转换为数字,直接保留原始字符串处理即可。同时为兼容输入中可能存在的空格(比如"103, 031"这种带空格的格式),要在分割后对每个元素做去空格处理。

修改后的完整代码

function compareLists(list1, list2) {
  let matches = [];
  for(let i = 0; i < list1.length; i++) {
    for(let j = 0; j < list2.length; j++) {
      // 直接对字符串拆分排序,无需toString()转换
      let num1Sorted = list1[i].split('').sort().join('');
      let num2Sorted = list2[j].split('').sort().join('');
      if(num1Sorted === num2Sorted) {
        matches.push([list1[i], list2[j]]); 
      }
    }
  }
  return matches;
}

// Get input and find matches
function findMatches() {
  // 分割后去除每个元素的首尾空格,去掉parseInt转换
  let list1 = document.getElementById("list1").value.split(",").map(n => n.trim()); 
  let list2 = document.getElementById("list2").value.split(",").map(n => n.trim());
  
  let matches = compareLists(list1, list2);
  displayMatches(matches);  
}

// Display matches
function displayMatches(matches) {
  let container = document.getElementById("matches");
  if(matches.length > 0) {
    container.innerHTML = "";
    matches.forEach(match => {
      container.innerHTML += match[0] + "<br>" + match[1] + "<br><br>";
    });
  } else {
    container.innerHTML = "No matches found";
  }
}

验证效果

修改后输入103和031,程序会识别出二者排序后的字符序列均为"013",最终输出原始的103和031,前导零得以保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:20:14