【问题标题】:Finding the next largest number in an array using JavaScript If...Else Statements使用 JavaScript If...Else 语句查找数组中的下一个最大数
【发布时间】:2018-05-16 12:42:46
【问题描述】:

请您解释一下下面这段代码中的“else if”语句如何从数组中返回第二大数字?

尤其是“else if 语句”中没有 AND 运算符 (&&)。我的意思是例如:

else if (max2 < array[i] && max1 > array[i])

我发现有人在 stackOverflow 上使用这种方法,但他们没有给出任何详细的解释(“为什么有效”):

var arr1 = [2, 3, 1, 6, 100, 49, 5, 7, 8, 9];

function getSecondMaxNumber(array) {
    var max1 = 0;
    var max2 = 0;
    for (var i = 0; i <= array.length; i++) {
        if (max1 < array[i]) {
            max1 = array[i];
        } else if (max2 < array[i]) {
            max2 = array[i];
        }
    }
    return max2;
}
console.log(getSecondMaxNumber(arr1));

更新

上面的方法是错误的,正如哈桑在下面评论的那样。

我决定使用:

var arr1 = [2, 3, 1, 6, 100, 49, 5, 7, 8, 9];


function getSecondMaxNumber(array) {
    function sortNumbers(a, b) { //Compare numbers.
        return a - b;
    }
    var arrSorted = array.sort(sortNumbers); //Set up sorting.
    return arrSorted[arrSorted.length - 2]; //Choose the second largest number in an array.
}
console.log(getSecondMaxNumber(arr1)); //Show me that number.

【问题讨论】:

  • else 测试仅在array[i] &gt;= max1 时运行,因此不需要您建议的&amp;&amp; 子句。
  • 您的算法不适用于已排序的数字。
  • 没错。它不适用于所有数字数组。

标签: javascript arrays function if-statement max


【解决方案1】:

您不需要&amp;&amp;,因为if 条件已经消除了max1 小于array[i] 的可能性。如果if 第一次失败,您将无法达到else if 条件。

另外注意,循环条件应该是&lt; 而不是&lt;=

【讨论】:

    【解决方案2】:
    if (max1 < array[i]) {
    

    如果当前数字大于当前最大数字,则将该数字设置为最大数字。

    } else if (max2 < array[i]) {
    

    如果它的不是最大的数字,它可能是第二大的。

    也许更短:

     const result = array.reduce(([max, max2], el) => el > max ? [el, max] : el > max2 ? [max, el] : [max, max2], [0,0])[1];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-16
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多