簡體   English   中英

Javascript - 將值與關聯數組索引進行比較

[英]Javascript - Compare value to Associative array index

我有以下代碼:

var license_price = 0;
    var num_licenses = jQuery('#num_licenses').val();
    var lp = {};

                lp[1]=12.50;
                lp[10]=15.50;
                lp[50]=50.00;

    for(var index in lp) {alert(index);
        if (num_licenses >= index){
            license_price = parseFloat(lp[index]);
        }
    }
    //alert(license_price);
    jQuery('#total_price').val((num_licenses * license_price));

此代碼確定在num_licenses框中輸入的值,然后通過數組lp並根據每個鍵的值分配價格。 因此,如果num_licenses = 8,則價格應為每個12.50,如果num_licess = 60,則價格應為60美元。

它適用於除2 - 9之外的所有值。如果我輸入2-9,則使用來自fp [10]的價格。 但是,如果它是1,那么我得到12.50。

小心,李

當您遍歷對象的索引時,它們將被鍵入為字符串。 你的>比較實際上是按字母順序排序而不是數字排序。 解析其數值以使其正常工作。 (按字母順序'2'出現在以'1'開頭的所有值之后,包括'10',所以'2'>'10'等等)

for(var index in lp) {
    alert(index);
    if(lp.hasOwnProperty(index)) { // prevent comparison when property inherited
        if (num_licenses >= parseInt(index,10) ){
            license_price = parseFloat(lp[index]);
        }
    }
}

問題是您正在將字符串與整數進行比較。 val()函數的結果是一個字符串。 因此,如果輸入為“2”,則“2”<= 10的結果為false。 您應該使用parseInt()函數將其首先轉換為整數。

這是它應該是什么樣子:

var license_price = 0;
var num_licenses = parseInt(jQuery('#num_licenses').val(),10);
var lp = {};

            lp[1]=12.50;
            lp[10]=15.50;
            lp[50]=50.00;

for(var index in lp) {alert(index);
    if (num_licenses >= index){
        alert("Greater than " + index);//added this for debugging
        license_price = parseFloat(lp[index]);
    }
}
//alert(license_price);
jQuery('#total_price').val((num_licenses * license_price));

請注意,我添加了對該值的parseInt()調用。 我還添加了一些警報調用,以便您可以看到正在發生的事情。

這是一個jsFiddle代碼片段的鏈接,以便您可以測試它: http//jsfiddle.net/CmbvW/8/

在您的代碼中,lp是一個Object而不是一個數組,因此index是一個類型為String的屬性名稱。

嘗試將代碼更改為

var lp = [];

那么索引就是一個數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM