[英]How to compare numbers as as string in javascript
我想比較 2 個數字,它們的類型是字符串,並返回它們匹配的 pourcentage。 規則是從左到右比較。 數字可以包含 1 到 6 位數字:
如果匹配 6 位數字 ==> 匹配 =100%
如果匹配 5 位數字 ==> 匹配 = 90%
如果匹配 4 位數字 ==> 匹配 = 80%
如果 3 位數字匹配 ==> 匹配 = 60%
如果 2 位數字匹配 ==> 匹配 = 40%
其余的 ==> 匹配 =0%
示例 1:
123456 和 123456 ==> 匹配 = 100%
12345 和 12345 ==> 匹配 = 90%
1234 和 1234 ==> 匹配 = 80%
123 和 123 ==> 匹配 = 60%
12 和 12 ==> 匹配 = 40%
對於上面的這些情況,我的函數做到了。 但是當我有兩個數字時,數字的位數並不相同。
示例 2:
123456 和 12 ==> 匹配應該是 40,因為我從左到右比較,我有 2 個第一個數字是相同的。
123456 和 123 ==> 匹配應該是 60。我的前 3 個數字是相同的
123456 和 1234 ==> 匹配應該是 80。我有 4 個第一個數字是相同的
123456 和 12345 ==> 匹配應該是 90。我的前 5 個數字是相同的
123456 和 129876 ==> 匹配應該是 40。我的前 2 個數字是相同的。
我的代碼是:
function string_compare (string_1, string_2){
let per
if ((string_1.substring(0, 2) == string_2.substring(0, 2)) && (string_1.length == string_2.length) && (string_1.length == 2 || string_1.length == 2))
{
per = 40
}
else if (string_1.substring(0, 3) == string_2.substring(0, 3) && (string_1.length == string_2.length) && (string_1.length == 3 || string_1.length == 3))
{
per = 60
}
else if (string_1.substring(0, 4) == string_2.substring(0, 4) && (string_1.length == string_2.length) && (string_1.length == 4 || string_1.length == 4))
{
per = 80
}
else if (string_1.substring(0, 5) == string_2.substring(0, 5) && (string_1.length == string_2.length) && (string_1.length == 5 || string_1.length == 5))
{
per = 90
}
else if (string_1.substring(0, 6) == string_2.substring(0, 6) && (string_1.length == string_2.length) && (string_1.length == 6 || string_1.length == 6))
{
per = 100
}else {
per = 0
}
return per
}
return string_compare("126543", "120000")
如何修改我的函數以處理/添加示例 2 中的案例? 示例 1 和示例 2 的其他所有內容均為 0%
謝謝
您嘗試做的事情沒有意義(或至少對我而言),但您可以使用以下算法“解決您的問題”
var num1 = "123456", num2 = "123", match = 0; for(var i = 0; i < 6; i++){ if(num1[i] != num2[i]){ break; } match += 1 } // Shorter... // for(var i = 0, match = 0; i < 6 && num1[i] == num2[i]; i++, match++); var percentage; switch(match){ case 6: percentage = 100; break case 5: percentage = 90; break case 4: percentage = 80; break case 3: percentage = 60; break case 2: percentage = 40; break default: percentage = 0; break } console.log(percentage)
像這樣的東西需要更少的重復編碼,更多......數學和邏輯:-)
function percentdiff(numstring1, numstring2) {
for(var i=0, l=Math.min(numstring1.length, numstring2.length); i<l; ++i) {
if(numstring1[i] != numstring2[i]) {
break;
}
}
return [-1, -1, 40, 60, 80, 90, 100][i];
}
我們逐個字符地遍歷字符串,直到兩個字符串中較短的一個的長度。
只要當前位置的兩個數字第一次不再匹配,就離開循環。
所以i
將是循環后左邊匹配數字的數量。
由於您的百分比分布沒有遵循明確的公式,因此我在此處使用了一個數組來將百分比與匹配數字的數量相匹配。 由於該數字可能小於 2,因此我在開頭插入了兩個“假”值 -1,以免引發錯誤。
(只有潛在輸入字符串長度超過 6 位且匹配項超過 6 的邊緣情況,這里沒有明確處理。)
let per = [0,0,40,60,80,90,100] calcPer = (num1, num2) => { num1= num1.toString(); num2= num2.toString(); count = 0; for(let i=0;i<num1.length;i++) { if(num1[i] == num2[i]) count += 1; else break; } return per[count] } console.log(calcPer(123456,123456)) console.log(calcPer(12345,12345)) console.log(calcPer(1234,1234)) console.log(calcPer(123,123)) console.log(calcPer(12,12)) console.log(calcPer(123456,12)) console.log(calcPer(123456,123)) console.log(calcPer(123456,1234)) console.log(calcPer(123456,12345)) console.log(calcPer(123456,129876))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.