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
相关产品推荐
相关产品推荐

