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_liccess=60,则价格应为60美元。
它适用于除2-9以外的所有值。如果输入2-9,则使用fp[10]的价格。但是,如果是1,那么我得到12.50。
小心,lee
当您迭代对象的索引时,它们被类型化为字符串。您的>比较实际上是按字母顺序排序,而不是按数字排序。分析其数值以使其工作。(按字母顺序"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是错误的。您应该首先使用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 = [];
那么索引将是一个数字。
相关文章:
- 名称输入的索引
- 比较从函数和生成的日期对象
- 如何使用 node.js 比较两个 json 数组
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 按照选项卡索引的顺序循环一个jQuery选择
- jQuery自定义验证比较多个输入的序列
- 在JavaScript中通过索引从对象数组中获取值
- 反向字符串比较
- 通过JSON&比较时间
- 如何比较两个数组,然后返回差异的索引
- Javascript-将值与关联数组索引进行比较
- 如何在 Javascript 中将一个数组的元素与另一个数组的索引进行比较
- 使用 Jquery 比较每个数组索引的输入文本数组控件和选择选项数组控件的值
- 比较each()jquery中的数组值和索引值
- 我比较两个字母的索引得到错误的结果
- 返回比较 Javascript 时存在于两个数组中的对象的索引
- Javascript比较索引与数组值
- Javascript -如何比较数组中的两个索引