亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript 排序函數不排序

Javascript 排序函數不排序

心有法竹 2023-03-18 15:05:51
我正在使用 Javascript 排序對對象數組進行排序。這就是我嘗試做的原因(選出我陣中的 10 名最佳球員):      this.topPlayers .sort(function(a, b) {        return a.stars > b.stars;      });      this.topPlayers = this.topPlayers.slice(0,10);當我這樣做時,它返回同樣的東西(10 個最差的玩家):      this.topPlayers .sort(function(a, b) {        return a.stars < b.stars;      });      this.topPlayers = this.topPlayers.slice(0,10);我究竟做錯了什么 ?兩種情況下的結果相同,嘗試對其他屬性進行排序,同樣的結果......我正在使用 angular 并在 ngOnInit() 函數上執行它。
查看完整描述

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'之前,反之亦然。


查看完整回答
反對 回復 2023-03-18
?
慕森卡

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);


查看完整回答
反對 回復 2023-03-18
?
人到中年有點甜

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即可。


查看完整回答
反對 回復 2023-03-18
  • 3 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號