我有一个对象数组,需要迭代查找并返回相应的值。
function getCost(val) {
let arr = JSON.parse('[ { "hours": 1, "cost": 100 }, { "hours": 2, "cost": 50 }, { "hours": 3, "cost": 20 }, { "hours": 4, "cost": 10 }, { "hours": 5, "cost": 5 } ]')
for (var i = 0; i < arr.length; i++) {
var item = arr[i]
let hours = parseInt(item['hours'], 10)
if (hours == val) {
return item['cost']
}
/*this condition not working*/
if (hours > val) {
alert('exceed') //this not called at all
return arr[arr.length - 1]['cost']
}
}
}
alert(getCost(4)) /*this works*/
alert(getCost(8)) /*this not work, give undefined*/
但是为什么当val条件大于比较值时却不起作用。 hours > val
根本不起作用。
我有任何错误吗?
答案 0 :(得分:0)
预期的行为是因为没有条件满足您的“不工作” if
块。您可以像这样检查最后一个索引
function getCost(val){
let arr = JSON.parse('[ { "hours": 1, "cost": 100 }, { "hours": 2, "cost": 50 }, { "hours": 3, "cost": 20 }, { "hours": 4, "cost": 10 }, { "hours": 5, "cost": 5 } ]')
for (var i = 0; i < arr.length; i++) {
var item = arr[i]
let hours = parseInt(item['hours'],10)
if(hours == val){
return item['cost']
}
/*check if it is already the last iteration of the loop*/
if(i==arr.length-1){
alert('exceed')
return arr[arr.length - 1]['cost']
}
}
}
alert(getCost(4))
alert(getCost(8))