Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-将值与关联数组索引进行比较_Javascript - Fatal编程技术网

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

Javascript-将值与关联数组索引进行比较,javascript,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_l

我有以下代码:

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_licenss=60,价格应该是60美元

它适用于除2-9之外的所有值。如果输入2-9,则使用fp[10]中的价格。但是,如果它是1,那么我得到12.50

保重,,
lee

当您迭代对象的索引时,它们被键入字符串。您的>比较实际上是按字母顺序排序,而不是按数字排序。解析其数值以使其正常工作。(按字母顺序“2”出现在所有以“1”开头的值之后,包括“10”,因此“2”大于“10”等)


在代码中,lp是一个对象而不是数组,所以index是一个字符串类型的属性名

尝试将代码更改为

var lp=[]


然后索引将是一个数字。

问题是您正在将字符串与整数进行比较。
val()
函数的结果是一个字符串。因此,如果输入为“2”,则除使用真数组外,“2”的结果将为所有未填充的索引留下间隙<代码>lp是[,12.50,,,,,,,,,15.50,,,,,,,50.00]
你不需要这样写<代码>var lp=[];lp[1]=12.50;lp[10]=15.50;lp[50]=50.00is ok并不意味着作为赋值——意味着这就是
lp
的值,即使您通过直接引用索引来初始化它。其余的空格未定义,但仍然存在,这似乎是在浪费内存。在任何情况下,数组都不是这种类型的结构真的吗?我不知道。它怎么能返回一个数字?我只是引用文档而已。我假设它尝试解析它,并检查结果是否为
NaN
。实际上,
typeof
表示它的值是字符串,即使我键入整数也是如此。可能在文本框中它总是返回字符串,但对于其他类型,它可能返回数字。我必须研究一下…如果在两个字符串上使用>操作符,它将按字母顺序进行比较,但是如果在一个字符串和一个数字上使用,它将按数字顺序进行比较。在本例中,两个值都是字符串,因此解析其中一个值很好。如果您想在以后以数字形式使用
num_许可证
,您还必须对其进行解析。
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]);
        }
    }
}
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));