0

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

这两个函数输出不同的结果。我的印象是 && 运算符本质上与嵌套 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"
4

3 回答 3

3

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

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为真时,它将return arr[x][prop]或如果为假,它将return "No such property"

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

而不是“正确”的解决方案将遍历所有数组元素,如果没有提供的名称,它将返回"No such property"

于 2017-07-21T20:03:05.010 回答
0

第二个函数不等于第一个函数,因为内部 if 有 else 条件。

AND运算符仅在它为真时才执行后续条件。

例如:如果条件是 X == Y && Y == Z 那么 Y == Z 只有在 X == Y 时才会执行

在您的第一种情况下,为条件 1 添加另一个,它看起来像:

 if Condition1 {

       if condition2

         console.log("1");

      else

            console.log("2");
    }
    else 

        console.log("3");

    Second Case

     If Condition1 && Condition2
       console.log("1");
     else
       console.log("2 and 3");  // all the case of 2 and 3 come here
于 2017-07-21T20:03:50.473 回答
0

这是100%的工作

function lookUp(arr, firstName, prop){
    var lock;

    for(var i = 0; i < arr.length; i++)
    {
        if((arr[i].firstName == firstName) && (arr[i].hasOwnProperty(prop)))
        {
            lock = arr[i][prop];
            break;
        }else{
            lock = "No such property";
        }
    }
    return lock;
}
于 2017-07-21T20:19:31.273 回答