【问题标题】:if else in a for loop [duplicate]if else 在for循环中[重复]
【发布时间】:2021-06-17 20:37:58
【问题描述】:

我正在尝试遍历具有多个属性的对象(联系人)数组并检查两个条件。 如果两个条件都成立,我希望返回 (prop) 的值,如果其中任何一个失败,则应返回“No such contact”。

该代码仅适用于 if 语句,但只要我添加 else,即使两个条件都为真,它也会返回“No such contact”。 ??? 在 else 启动之前,我应该将 else 放在哪里以允许循环遍历所有对象?

checkName(name, prop){
for (i = 0; i <= contacts.length-1; i++) {
    if (name === contacts[i].firstName && contacts[i].hasOwnProperty(prop)) {
            return(contacts[i][prop]);
    } else {
        return("No such contact");
    }
}
}

【问题讨论】:

  • if 语句中的错字?尝试为&amp;&amp; 修复&amp; 也可以使用forEach 更轻松地循环遍历您的数组

标签: javascript arrays


【解决方案1】:

您使用的是单个&amp;,您需要使用两个这样的:&amp;&amp;

但是,由于您使用的是return,因此您将在第一次执行时退出该函数。您需要将 return 移到循环之外,以便在 for 循环之后,如果它没有退出,它将返回没有找到。

checkName(name, prop){
    for (i = 0; i <= contacts.length-1; i++) {
        if (name === contacts[i].firstName && contacts[i].hasOwnProperty(prop)) {
                return(contacts[i][prop]);
        }
    }
    return("No such contact");
}

【讨论】:

  • && 也是如此。问题不在于 if 语句,当我在没有 else 的情况下执行它时,它工作正常,只要我添加 else,即使条件为真,它也会返回 else 值。让我觉得它遍历数组,第一个元素的条件为假,所以它返回 else 并停止迭代。
  • @Gigi 阅读第二段...
  • 在这种情况下&amp;&amp;&amp;之间的唯一区别是后者short-circuits
  • @Ivar 不完全是,因为&amp; 是按位与。 2 &amp;&amp; true 返回真值(true),2 &amp; true 返回假值(0
  • 谢谢。不知道return退出函数,谢谢。
【解决方案2】:

除了错误的使用AND运算符(bitwise AND &amp; vs logical AND &amp;&amp;),你需要声明变量i并循环直到i小于那个长度。

但主要问题是如果第一次检查不正确并且函数返回消息时提前退出。

为避免这种情况,您需要在访问完所有项目后将消息移动到函数的末尾。

另一个提示,实际上只是一个装饰部分,删除返回表达式的烦人的大括号。

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

【讨论】:

  • &amp;&amp; &amp; ?你是说&amp;&amp;
  • 谢谢妮娜。有效!也谢谢你对化妆品的建议。
猜你喜欢
  • 2017-08-02
  • 2019-12-04
  • 2012-11-13
  • 1970-01-01
  • 2021-09-16
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多