首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用for循环的数组迭代-使用条件语句和返回

使用for循环的数组迭代-使用条件语句和返回
EN

Stack Overflow用户
提问于 2019-07-13 20:10:20
回答 2查看 83关注 0票数 1

对于此对象数组:

代码语言:javascript
代码运行次数:0
运行
复制
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"]
  }
];

然后有一个for循环,它遍历对象数组和要在对象上查找的参数。我知道我们正在迭代,函数会在returns之后停止运行。我包含了一个console.log(i);来查看迭代器变量的值,以查看循环发生了多少次。

代码语言:javascript
代码运行次数:0
运行
复制
function lookUpProfile(name, prop) {  

    for (var i = 0; i < contacts.length; i++) {  
      console.log(i);
      if (contacts[i].firstName === name) {  
        if (contacts[i].hasOwnProperty(prop)) {         
          return contacts[i][prop]   
        } else {
          return "No such property"; 
        }
      }

    } //end of loop
  return "No such contact"; 
  }


   console.log(lookUpProfile("Kristian", "lastName")); // Vos

所以我运行代码并查看我的控制台输出,得到我期望的结果,我们迭代4次,然后我们return当前对象属性。

为什么当我重构函数时,代码不能工作,所以我使用逻辑AND运算符&&,它将两个测试条件组合成一个if语句,而不是使用两个嵌套的if条件-如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
function lookUpProfile(name, prop) { 
  for (var i = 0; i < contacts.length; i++) {  
    console.log(i);
    if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) {                 
      return contacts[i][prop]   
    } else {
      return "No such property"; 
    }

  } //end of loop
  return "No such contact"; 
}

 console.log(lookUpProfile("Kristian", "lastName")); // Expected output: Vos

现在,当我运行代码时,似乎没有发生迭代,因为console.log(i);似乎只输出一次undefined,而不是多次输出,所以我们似乎没有循环,我不明白为什么。其次,即使我们的测试条件得到满足,我们也会返回“没有这样的属性”。

如果这个简单的重构破坏了函数,我需要理解的是。我知道一旦函数返回一些东西,函数执行就会结束,迭代就会停止,我认为这个问题与循环之外和控制流中断有关,但我不明白为什么。请有人清楚地解释为什么在我的具体案例中会发生这种情况。

EN

回答 2

Stack Overflow用户

发布于 2019-07-13 20:14:45

如果嵌套了if条件

代码语言:javascript
代码运行次数:0
运行
复制
if (contacts[i].firstName === name)

如果name不匹配,则此函数检查name。它不执行任何操作

但在第二个示例中,在if之后的else语句中返回,如果case name不匹配,则从函数返回

代码语言:javascript
代码运行次数:0
运行
复制
 if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) {                 
      return contacts[i][prop]   
    } else {                           // problem is here
  return "No such property"; 
 }

只需从循环中删除else条件

代码语言:javascript
代码运行次数:0
运行
复制
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 (var i = 0; i < contacts.length; i++) {
    if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) {
      return contacts[i][prop]
    }
  } //end of loop
  return "No such contact";
}

console.log(lookUpProfile("Kristian", "lastName"));

票数 1
EN

Stack Overflow用户

发布于 2019-07-13 20:13:35

因为在前面的代码中,只有当contacts[i].hasOwnProperty(prop)false时才返回"No such property"。现在,如果contacts[i].firstName === name为false,也会返回。您希望将这两个if块分开。

此外,console.log(i)打印undefined的原因还在于它位于for循环之上,在i变量的声明之前。将其下移1行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57019030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档