首页 > 解决方案 > 解决 Js 对象属性查找

问题描述

由于我不明白的原因,此代码中的以下函数正在工作。请有人向我解释为什么第二个 if 语句如果没有嵌套在第一个中就行不通。还有为什么第一条语句不需要返回。

var contacts = [{
    "firstName": "Akira",
    "lastName": "Laine",
    "number": "0543236543",
    "likes": ["Pizza", "Coding", "Brownie Points"]
  },
  {
    "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"]
  }
];

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

lookUpProfile("Akira", "likes");

标签: javascript

解决方案


我相信您的问题基本上是关于嵌套 if 语句和return,而不是在每个if语句中进行的具体检查,所以我的回答反映了这一假设。

从根本上说,if 语句会检查某些内容,当某些内容为真时,它将运行括号中的一些代码。

因此,当您有 2 个嵌套 if 语句时:

if (a) {
  if (b) {
    return x();
  }
}

在上面的例子中,只有当两者都为真return x()时才会运行。 ab

如果我们要重新组织这个:

if (a) {
}
if (b) {
  return x();
}

在这种情况下,return x()will ifb为真。a没有效果。

在这个例子中:

if (a) {
  return x();
}
if (b) {
  return x();
}

以上,如果其中一个为真,x()则将运行。所以如果是真的,但是是假的,我们仍然会返回。 abba

您的代码的目的是在两个条件都为真时返回。这是另一种写法:

if (a && b) {
  return x();
}

之所以没有这样做,是因为如果该属性不存在,该任务需要第二个条件返回一个特定的字符串“No such property”,如果该属性确实存在并且确实存在,则忽略该联系人并继续下一个联系人不匹配name

将其应用于我们的 if 语句,它基本上变成了这样:

if (a) {
  if (b) {
    return x();
  } else {
    return "No such property";
  }
} else {
  // Do nothing! this else statement doesn't
  // exist in your code, but I'm adding it in
  // To illustrate that we do nothing if a is
  // false
}

不过,有一种更优雅的方式来编写它,我们可以反转“b”检查并提前返回:

if (!b) {
  return 'No such property';
}
if (a) {
  return x();
}

在没有嵌套的情况下这正确的原因是:

  1. 如果b为假,我们确定我们要返回错误。
  2. 当我们使用return时,函数会立即结束/退出,因此可以保证a检查永远不会发生。

推荐阅读