Javascript - 将值与关联数组索引进行比较

时间:2012-07-13 03:18:02

标签: javascript

我有以下代码:

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。

小心, 利

3 个答案:

答案 0 :(得分:1)

当你遍历对象的索引时,它们被输入为字符串。你的>比较实际上是按字母顺序排序而不是数字排序。解析其数值以使其正常工作。 (按字母顺序'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]);
        }
    }
}

答案 1 :(得分:1)

问题是您正在将字符串与整数进行比较。 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/

答案 2 :(得分:0)

在你的代码中,lp是一个Object而不是一个数组,所以index是一个类型为String的属性名。

尝试将代码更改为

var lp = [];

然后索引将是一个数字。