Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问if条件中的Javascript对象,可以这样做吗?_Javascript_Javascript Objects - Fatal编程技术网

访问if条件中的Javascript对象,可以这样做吗?

访问if条件中的Javascript对象,可以这样做吗?,javascript,javascript-objects,Javascript,Javascript Objects,这是我在自由代码营挑战“概要文件查找”中的代码,我被这段代码困住了,我的问题是if条件,如何让测试用例进入我的第一个if条件 var contacts = [ { "firstName": "Akira", "lastName": "Laine", "number": "0543236543", "likes": ["Pizza", "Coding", "Brownie Points"] }, { "firstName": "Harry", "la

这是我在自由代码营挑战“概要文件查找”中的代码,我被这段代码困住了,我的问题是if条件,如何让测试用例进入我的第一个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(firstName, prop){
// Only change code below this line
  for ( var i = 0; i < contacts.length; i++) {
    if ( contacts[i].firstName === firstName && contacts[i].hasOwnProperty(prop)) {
      return contacts[i][prop];
    }
    else if (firstName !== contacts[i].firstName) {
      return "No such contact";
    }
    else if (contacts[i].hasOwnProperty(prop) === false) {
      return "No such property";
    }
  }
}

lookUpProfile("Harry", "likes");
var联系人=[
{
“名字”:“Akira”,
“姓氏”:“莱恩”,
“编号”:“0543236543”,
“喜欢”:[“披萨”、“编码”、“布朗尼点数”]
},
{
“名字”:“哈利”,
“姓氏”:“波特”,
“编号”:“0994372684”,
“喜欢”:[“霍格沃茨”、“魔法”、“海格”]
},
{
“名字”:“夏洛克”,
“姓氏”:“福尔摩斯”,
“编号”:“0487345643”,
“喜欢”:[“有趣的案例”,“小提琴”]
},
{
“名字”:“克里斯蒂安”,
“姓氏”:“Vos”,
“编号”:“未知”,
“喜欢”:[“Javascript”、“游戏”、“狐狸”]
}
];
函数lookUpProfile(firstName,prop){
//仅更改此行下方的代码
对于(变量i=0;i

我应该得到的是“likes”的值,即[“霍格沃茨”、“魔法”、“海格”],要做到这一点,它应该进入第一个if条件,这就是问题所在。

你的问题是你回来得早。不管怎样,如果满足任何条件,您总是返回
contacts
集合的第一次迭代。您需要做的是将答案存储在循环外部的局部变量中,然后返回该值。这样做可以确保您已经完成了所有迭代,而不会过早返回

试试这个:
var联系人=[{
“名字”:“Akira”,
“姓氏”:“莱恩”,
“编号”:“0543236543”,
“喜欢”:[“披萨”、“编码”、“布朗尼点数”]
}, {
“名字”:“哈利”,
“姓氏”:“波特”,
“编号”:“0994372684”,
“喜欢”:[“霍格沃茨”、“魔法”、“海格”]
}, {
“名字”:“夏洛克”,
“姓氏”:“福尔摩斯”,
“编号”:“0487345643”,
“喜欢”:[“有趣的案例”,“小提琴”]
}, {
“名字”:“克里斯蒂安”,
“姓氏”:“Vos”,
“编号”:“未知”,
“喜欢”:[“Javascript”、“游戏”、“狐狸”]
}];
函数lookUpProfile(firstName,prop){
var结果=未定义;
对于(变量i=0;i可能是因为“return”退出for循环并在第一项之后停止。尝试使用“console.log”


问题在于,您在第一次“for”迭代中返回了一个值。 您需要使用一个新变量,将搜索分为两步,然后返回结果

function lookUpProfile(firstName, prop){
  var contact;
  for (var i = 0; i < contacts.length; i++) {
    if (contacts[i].firstName === firstName) {
      contact = contacts[i];
    }
  }
  if (!contact) {
    return "No such contact";
  }
  if (contact.hasOwnProperty(prop) === false) {
    return "No such property";
  }
  return contact[prop];
}
函数lookUpProfile(firstName,prop){
无功接触;
对于(变量i=0;i
您返回得太早,因此当第一个结果与“Harry”不匹配时,它会自动认为找不到联系人

Seth的答案将适用于您的用例,但我认为如果联系人在数组中的顺序不同,它将错误地适用于其他用例。如果在找到初始正确的触点后有更多触点要循环,则结果值将在循环中稍后被覆盖

我会将lookUpProfile重写为以下内容:

function lookUpProfile(firstName, prop) {

  var profile = null;
  var err = null;

   for (var i = 0; i < contacts.length; i++) {
     if (firstName !== contacts[i].firstName) {
      err = "No such contact";
     } else if (contacts[i].hasOwnProperty(prop) === false) {
      err = "No such property";
     }
     if (contacts[i].firstName === firstName && contacts[i].hasOwnProperty(prop)) {
      profile =  contacts[i][prop];
     }
  }

  return (profile) ? profile : err;
}
函数lookUpProfile(firstName,prop){
var-profile=null;
var err=null;
对于(变量i=0;i

您也可以查看我创建的JSBin:

请将代码作为代码片段而不是图像发布,这样我们可以调整代码以帮助解决您的问题。请将代码作为文本,现在是图像。您应该将代码添加为
代码,而不是屏幕截图。这样,人们就不必打开另一个链接来查看您正在做什么。当循环的任何迭代中的名字都不匹配时,您将返回一个错误。您的3个if案例捕获了所有可能的场景,并返回所有可能的场景。您的if将永远不会执行多个循环,因此将永远不会看到第二个元素(“Harry”)。这一点都没有帮助。。。其思想是让函数返回匹配的用户,而不是记录每次迭代的结果。通常使用“过滤器”功能来解决此问题。这可能是你的解决方案,但仍然无助于OP。一个更可接受的答案是你刚刚链接的小提琴。当然,过滤器会是一个更好的选择。事实上,我尝试了这个,这是一个很好的观点。不幸的是,变量“result”并没有在我需要它停止时停止,循环继续并覆盖我想要的答案,javascript对象比问题中的对象大,我发布了一个简化版本。例如,当结果的值为“likes”时,它将继续,并遇到另一个进入相同循环和相同if条件的情况,并用我不需要的新数据覆盖“result”。是否用更可靠的数据集更新问题?更新了答案
function lookUpProfile(firstName, prop) {

  var profile = null;
  var err = null;

   for (var i = 0; i < contacts.length; i++) {
     if (firstName !== contacts[i].firstName) {
      err = "No such contact";
     } else if (contacts[i].hasOwnProperty(prop) === false) {
      err = "No such property";
     }
     if (contacts[i].firstName === firstName && contacts[i].hasOwnProperty(prop)) {
      profile =  contacts[i][prop];
     }
  }

  return (profile) ? profile : err;
}