3 回答

TA貢獻1816條經驗 獲得超6個贊
您的比較函數返回一個布爾值。Array.sort() 期望您返回一個數字。
如果您的比較函數返回值 < 0,則“a”將放在“b”之前。
如果您的比較函數返回值 > 0,則“b”將放在“a”之前。
如果您的比較函數返回 0,則訂單將保持原樣。
因此,要按降序排列星星的數量,您可以這樣做:
this.topPlayers.sort((a, b) => b.stars - a.stars);
如果'a'比'b'有更多的星星,返回值將為負,'a'將排在'b'之前,反之亦然。

TA貢獻1806條經驗 獲得超8個贊
這是因為Array 的 sort()期望它的函數返回一個數值,而不是你給它的布爾值。負結果表示排序較低,0 表示保持原樣,正表示排序較高。
在 ES6 中,使用這樣的東西:
let?top10?=?this.topPlayers ????.sort((a,b)?=>?b.stars?-?a.stars) ????.slice(0,10); let?bottom10?=?this.topPlayers ????.sort((a,b)?=>?a.stars?-?b.stars) ????.slice(0,10);

TA貢獻1895條經驗 獲得超7個贊
作為參數Array.prototype.sort
,期望一個返回數值而不是布爾值的比較函數。
這個比較函數需要遵循這個邏輯:
function compare(a, b) {
? if (a is less than b by some ordering criterion) {
? ? return -1; // or any value smaller than zero
? }
? if (a is greater than b by the ordering criterion) {
? ? return 1; // or any value greater than zero
? }
? // a must be equal to b
? return 0;
}
在您的情況下,如果stars是一個數字,您可以按以下方式按降序對數組進行排序:
this.topPlayers.sort(function(a, b) {
? return b.stars - a.stars;
});
對于升序,您只需要 returna.stars - b.stars即可。
添加回答
舉報