千萬里不及你
2021-06-21 21:26:19
我是編碼新手,仍在學習。我的朋友給了我一個任務來編寫一個函數,該函數確實從數組中返回第二大數字,我已經設法使用 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
提交
取消