JavaScript实现1-6位数字左对齐匹配百分比计算的函数方案
JavaScript数字逐位匹配百分比计算方案
嘿,我来给你搞定这个逐位匹配算百分比的需求!先把需求再捋一遍:拿两个1-6位的数字,从左到右逐位对比,按连续匹配的位数给对应百分比——6位全中100%,5位90%,4位80%,3位60%,2位40%,剩下的情况都算0%。
这里我给你两种常见场景的实现,你可以根据实际业务需求选择:
场景1:统一补前导零到6位后对比
适合要求两个数字按6位长度对齐,短数字前面补零的情况(比如把123当成000123和123456对比)。
function calculateMatchPercentage(num1, num2) { // 转字符串并补前导零到6位,确保两个字符串长度一致 const str1 = String(num1).padStart(6, '0'); const str2 = String(num2).padStart(6, '0'); let consecutiveMatches = 0; // 从左到右逐位对比,遇到不匹配就停止计数 for (let i = 0; i < 6; i++) { if (str1[i] === str2[i]) { consecutiveMatches++; } else { break; } } // 按匹配位数返回对应百分比 switch(consecutiveMatches) { case 6: return 100; case 5: return 90; case 4: return 80; case 3: return 60; case 2: return 40; default: return 0; } }
测试示例:
console.log(calculateMatchPercentage(123456, 123456)); // 输出100 console.log(calculateMatchPercentage(123456, 123450)); // 输出90 console.log(calculateMatchPercentage(123, 123456)); // 输出0(补零后000123 vs 123456,第一位不匹配)
场景2:左对齐对比到较短数字的长度
适合短数字和长数字左对齐,只对比到短数字的位数(比如123和123456对比前3位,算3位匹配)。
function calculateMatchPercentage(num1, num2) { const str1 = String(num1); const str2 = String(num2); // 只对比到两个数字中较短的那个长度 const maxCompareLength = Math.min(str1.length, str2.length); let consecutiveMatches = 0; for (let i = 0; i < maxCompareLength; i++) { if (str1[i] === str2[i]) { consecutiveMatches++; } else { break; } } // 按规则返回百分比 switch(consecutiveMatches) { case 6: return 100; case 5: return 90; case 4: return 80; case 3: return 60; case 2: return 40; default: return 0; } }
测试示例:
console.log(calculateMatchPercentage(123, 123456)); // 输出60 console.log(calculateMatchPercentage(12345, 123450)); // 输出90 console.log(calculateMatchPercentage(123456, 123)); // 输出60
两种实现的核心都是统计从左开始的连续匹配位数——毕竟你要求“从左到右进行比较”,一旦某一位不匹配,后面的就算一致也不再统计啦。
内容的提问来源于stack exchange,提问作者verojoucla




