我是编码的新手,还在学习。我的朋友给我一个任务来编写一个函数,该函数确实从数组中返回第二高的数字,我已经设法使用array.prototype.sort()做到了。他说用“ <”或“>”替换“-”以使代码更清晰,这就是问题的出处。
我在Windows上使用VCS,但无法正常工作。 我的朋友使用Mac,一切正常。 在jsfiddle上进行了尝试,一切正常。
const secondMax = (arr) => {
return arr.sort((a, b) => b - a)[1]; //does return the correct number after console.log()
};
const secondMax = (arr) => {
return arr.sort((a, b) => a < b)[1]; //does not
};
“ a b”应按升序排列 但是无论我使用哪个运算符,排序都会失败,并且只会从数组中返回第二个数字
答案 0 :(得分:3)
您应该返回一个数字,而不是布尔值。所以第一个是正确的。后者可能在某些javascript引擎上偶然起作用,但不能保证。
答案 1 :(得分:0)
sort
默认将数组排序为String
。如果您通过比较器,则它是一个function
,它将取决于两个参数和return
:
使用逻辑运算符代替以上内容是错误的。
但是,如果您有兴趣找到第二大的数字,那么最好使用循环来完成:
var largestNumbers = [];
var firstIndex = (arr[0] < arr[1]) ? 1 : 0;
largestNumbers.push(arr[firstIndex]);
largestNumbers.push(arr[1 - firstIndex]);
for (var i = 2; i < arr.length; i++) {
if (largestNumbers[1] < arr[i]) {
if (largestNumbers[0] < arr[i]) {
largestNumbers[1] = largestNumbers[0];
largestNumbers[0] = arr[i];
}
}
}
这比对数组排序更快,更重要的是,它不会破坏您的初始顺序,而只是找到第二大数字。