我是编码新手,仍在学习。我的朋友给了我一个任务来编写一个函数,该函数确实从数组中返回第二大数字,我已经设法使用 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" 应该是降序排序 "a > b" 应该是升序排序 但是无论我使用哪个运算符,排序都会失败并且只返回数组中的第二个数字
2 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
sort
String
默认情况下对数组进行排序。如果你传递一个比较器,那么它是一个function
取决于两个参数和return
:
负数,如果第一个参数小于第二个
0 如果它们相等
正,如果第一个参数大于第二个
使用逻辑运算符代替上述运算符是错误的。
但是,如果您有兴趣找到第二大数字,那么最好使用循环来完成:
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];
}
}
}
这比对数组排序更快,更重要的是,它不会为了找到第二大数字而破坏您的初始顺序。
添加回答
举报
0/150
提交
取消