【问题标题】:Itterate through an array yields different results遍历数组会产生不同的结果
【发布时间】:2020-09-26 04:42:34
【问题描述】:

我有一个数组列表:["April", "May", "June", "July"]

为什么if(arr[i] === "June")result会显示“找到月份”,而if(arr[i] === "April")if(arr[i] === "May")会显示“没有找到月份”?

如何修改代码,以便result 将显示Found monthAprilMay

function holidays(arr) {
    let result = ''
    for (let i = 0; i < arr.length; i++){
        if(arr[i] === "June"){
            result = "Found month"
        } else {result = "Didn't find month"}
    } return result
  } 
  
  const months = ["April", "May", "June"];
  console.log(holidays(months)); 

【问题讨论】:

  • 一旦你有一个匹配,你应该立即退出循环,否则下一次迭代会破坏之前的结果。
  • 更好的是,考虑使用somefind,具体取决于您在此处要完成的任务。
  • 如何格式化代码很重要,尤其是在可读性和查看代码时发现错误的难易程度方面。我建议您使用某种代码格式化程序,例如更漂亮。

标签: javascript


【解决方案1】:

您需要省略not found 赋值,因为在第一个循环中,您无法知道下一个循环中是否出现了正确的月份。

所以将它移到最后并在找到时尽早退出,因为您不需要迭代数组的其余部分。

function holidays(arr) {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] === "June") {
            return "Found month";
        }
    }
    return "Didn't find month";
}

const months = ["April", "May", "June"];

console.log(holidays(months));

使用Array#includes 的简短方法。

function holidays(arr) {
    return arr.includes("June")
        ? "Found month"
        : "Didn't find month";
}

const months = ["April", "May", "June"];

console.log(holidays(months));

【讨论】:

    【解决方案2】:

    您必须从数组中中断,以便新结果不会覆盖旧结果。

    function holidays(arr) {
      let result = ''
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] === "May") {
          result = "Found month"
          break
        } else {
          result = "Didn't find month"
        }
      }
      return result
    }
    
    const months = ["April", "May", "June"];
    console.log(holidays(months));

    break 的 MDN 参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/break

    但是,如果你需要检查一个数组是否包含某些东西,你应该使用Array.includes:

    function holidays(arr) {
      return (arr.includes("May") ? "Found": "Not found")
    }
    
    const months = ["April", "May", "June"];
    console.log(holidays(months));

    Array.prototype.includes 的 MDN 参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes

    另外,在上面的 Array.includes 示例中,我使用了一种叫做三元运算符的东西:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 2018-01-29
      相关资源
      最近更新 更多