【问题标题】:trying to use a for loop with if else statement in objects尝试在对象中使用带有 if else 语句的 for 循环
【发布时间】:2017-06-14 06:14:06
【问题描述】:

我正在尝试编写一个函数,该函数将遍历保存对象的变量。如果您传入作为对象属性的名字,您应该得到 true。如果没有,你应该得到错误。但是,无论我通过函数传递什么,我总是得到错误。非常感谢任何帮助。

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 attempt(firstName){
for(var i = 0;i < contacts.length; i++){
    if(contacts[i].firstName==firstName){
    return true;
    } else {
      return false;
    }
 }  
}

【问题讨论】:

  • 这种情况经常发生,必须成为它的欺骗目标......
  • 您的title 没有提出任何问题或暗示问题。
  • 旁注:如果您发现自己在写if (a == b) { return true; } else { return false; },请停下来改写return a == b;。它完全做同样的事情。

标签: javascript if-statement for-loop


【解决方案1】:

思考一下逻辑:第一个循环会发生什么?函数响应if/else做了什么?正确的!它会立即返回truefalse,根本不会遍历剩余的条目。

您需要完全删除 else 并将 return false 移动到 循环之外:

function attempt(firstName) {
    for (var i = 0; i < contacts.length; i++) {
        if (contacts[i].firstName == firstName) {
            return true;
        }
    }
    return false;
}

旁注:Array#some 正是为这个用例而设计的:

function attempt(firstName) {
    return contacts.some(function(entry) {
        return entry.firstName == firstName;
    });
}

【讨论】:

  • @ibrahimmahrir - 编辑时请注意“其他人已编辑此内容”警告。
  • 你的意思是要吹走===吗?因为没有它,你可以传入0 并匹配“”。很难想象这就是问题中描述的意图。
  • @pvg: == vs. === 与问题无关。如果你想建议一种编码风格,评论会是更合适的地方。
  • 这与问题无关,提供的代码可能包含多个问题,这一点就是这样做的。这不是风格,问题中描述的预期行为实际上与此答案中的代码不匹配。在这种情况下,0 匹配 "" 不是文体问题,而是一个错误。
  • @pvg:你假设 A)他们将传递一个非字符串到函数中(没有迹象表明),并且 B)他们将拥有 @987654335 @ 作为数组中的名字(没有迹象表明)。问题中没有任何关于让其他类型浮动的任何内容,答案中的函数完全符合问题所说的应该做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多