Javascript 排序函数不排序

我正在使用 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() 函数上执行它。


心有法竹
浏览 212回答 3
3回答

潇湘沐

您的比较函数返回一个布尔值。Array.sort() 期望您返回一个数字。如果您的比较函数返回值 < 0,则“a”将放在“b”之前。如果您的比较函数返回值 > 0,则“b”将放在“a”之前。如果您的比较函数返回 0,则订单将保持原样。因此,要按降序排列星星的数量,您可以这样做:this.topPlayers.sort((a,&nbsp;b)&nbsp;=>&nbsp;b.stars&nbsp;-&nbsp;a.stars);如果'a'比'b'有更多的星星,返回值将为负,'a'将排在'b'之前,反之亦然。

慕森卡

这是因为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);

人到中年有点甜

作为参数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即可。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript