奇怪的javascript循环行为

时间:2019-06-22 06:03:52

标签: javascript arrays object

我有一个对象数组,需要迭代查找并返回相应的值。

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根本不起作用。 我有任何错误吗?

1 个答案:

答案 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))