首页 > 解决方案 > 比较两个数组的 for 循环总是返回 false

问题描述

作为编码挑战的一部分,我正在创建一个比较两个数组的函数,只要 Array1 中的至少 1 个值超过其在 Array2 中的对应值,则返回“true”,否则返回 false。

因此,const a = isFirstSuperior([1, 2, 3, 4], [1, 2, 3, 3])应该解析为“真”,因为每个数组中的最后一位数字(4 确实大于 3。

我的困惑的根源如下:

  1. 为什么我的解决方案(下)总是将上述表达式解析为“假”;和
  2. 鉴于实际解决方案的“return false”语句完全在“for 循环”之外,为什么他们的代码不是每次都自动解析为“false”?它怎么知道在这种情况下尊重'for循环'返回'true'并跳到函数末尾而不返回'false'?

我的(不成功的)解决方案

function isFirstSuperior(arr1, arr2) {
    for (i=0; i < arr1.length; i++) {
            if (arr1[i] > arr2[i]) {
                return true
            } else {
                return false
            }
      }
}

实际解决方案

function isFirstSuperior(arr1, arr2) {
    for (i=0; i < arr1.length; i++) {
            if (arr1[i] > arr2[i]) {
                return true
            } 
     }
    return false
}

标签: javascriptfor-loop

解决方案


如果整个循环完成,工作解决方案只会返回 false。

否则,如果return true执行了循环中断并退出函数并且return false永远不会到达该语句。

您的版本不会超过数组中的第一个元素,因为您有两个条件的 return 并且 return 会中断循环并退出函数


推荐阅读