javascript - 嵌套的 if 语句和 && (and) 运算符在这个 for 循环中有何不同?

标签 javascript arrays for-loop javascript-objects and-operator

这里有类似的问题,但我找不到与此相关的问题。这是我的问题:

这两个函数输出不同的结果。我的印象是 && 运算符本质上与嵌套 if 语句的工作方式相同。我对 && 运算符如何工作显然存在误解/逻辑错误。我相信这与循环并尝试同时阅读条件或类似的事情有关,但如果有人能详细说明正在发生的事情,我们将不胜感激。第二个函数中的 && 运算符发生了什么?为什么它输出未找到属性?

var contacts = [
    {
        "firstName": "Harry",
        "lastName": "Potter",
        "number": "0994372684",
        "likes": ["Hogwarts", "Magic", "Hagrid"]
    },
    {
        "firstName": "Sherlock",
        "lastName": "Holmes",
        "number": "0487345643",
        "likes": ["Intriguing Cases", "Violin"]
    },
    {
        "firstName": "Kristian",
        "lastName": "Vos",
        "number": "unknown",
        "likes": ["Javascript", "Gaming", "Foxes"]
    },
    {
        "firstName": "Akira",
        "lastName": "Laine",
        "number": "0543236543",
        "likes": ["Pizza", "Coding", "Brownie Points"]
    }
];

function lookUp(arr, firstName, prop){
  for (var x = 0; x < contacts.length; x++){
    if (arr[x].firstName === firstName) 
      if (arr[x].hasOwnProperty(prop)) 
        return arr[x][prop];
      else 
        return "No such property";
  }
}

lookUp(contacts, "Kristian", "likes")
// ["Javascript", "Gaming", "Foxes"]

function lookUp(arr, firstName, prop){
  for (var x = 0; x < contacts.length; x++){
    if (arr[x].firstName === firstName && arr[x].hasOwnProperty(prop))  
      return arr[x][prop];
    else 
        return "No such property";
  }
}

lookUp(contacts, "Kristian", "likes")
// "No such property"

最佳答案

正确的函数可能如下所示:

function lookUp(arr, firstName, prop) {
    for (var x = 0; x < contacts.length; x++) {
        if (arr[x].firstName === firstName && arr[x].hasOwnProperty(prop)) 
            return arr[x][prop];
    }
    return "No such property";
}

说明

你的循环只会有一次迭代,因为当第一个 if 为 true 时,它​​将返回 arr[x][prop] ,或者如果它为 false ,它将 >返回“没有这样的属性”

return总是跳出函数,这就是循环停止的原因

不是“正确”的解决方案将迭代所有数组元素,如果没有提供的名称,它将返回“没有这样的属性”

关于javascript - 嵌套的 if 语句和 && (and) 运算符在这个 for 循环中有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45245749/

相关文章:

javascript - Chrome和Firefox上的窗口宽度错误

perl - Perl 中的数组元素计数

java - 将值存储在数组中未指定的索引处。什么更快?

javascript - jQuery 插件 : plugin methods calling other plugin methods?

javascript - 当单元格更改时如何刷新自定义剑道网格过滤器

javascript - 如何使用 ExtJS 访问从 JsonStore 获取的值?

php - 如果 $a 和 $b 都是数组,那么 $a+$b 的结果是什么?

javascript - for..in 数组上的循环也会迭代原型(prototype)函数

CS50:For循环设计

for-loop - Go 中的捕获闭包(用于循环变量)