3 回答

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

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是因?yàn)锳rray 的 sort()期望它的函數(shù)返回一個(gè)數(shù)值,而不是你給它的布爾值。負(fù)結(jié)果表示排序較低,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貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
作為參數(shù)Array.prototype.sort
,期望一個(gè)返回?cái)?shù)值而不是布爾值的比較函數(shù)。
這個(gè)比較函數(shù)需要遵循這個(gè)邏輯:
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是一個(gè)數(shù)字,您可以按以下方式按降序?qū)?shù)組進(jìn)行排序:
this.topPlayers.sort(function(a, b) {
? return b.stars - a.stars;
});
對于升序,您只需要 returna.stars - b.stars即可。
添加回答
舉報(bào)