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));