【发布时间】: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] >= max1时运行,因此不需要您建议的&&子句。 -
您的算法不适用于已排序的数字。
-
没错。它不适用于所有数字数组。
标签: javascript arrays function if-statement max