Javascript排序函数没有排序

Javascript排序函数没有排序,javascript,arrays,json,angular,sorting,Javascript,Arrays,Json,Angular,Sorting,我正在使用Javascript排序对对象数组进行排序。 这就是为什么我要在我的阵型中选出10名最好的球员: this.topPlayers .sort(function(a, b) { return a.stars > b.stars; }); this.topPlayers = this.topPlayers.slice(0,10); 当我做这件事的时候,我得到了同样的回报——10名最差的球员: this.topPlaye

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

该函数需要一个比较函数作为参数,返回一个数值,而不是布尔值

此比较功能需要遵循以下逻辑:

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;
}
在您的情况下,如果星号是一个数字,则可以按以下方式按降序排列阵列:

this.topPlayers.sort(function(a, b) {
  return b.stars - a.stars;
});
对于升序,只需返回a.stars-b.stars即可。

该函数需要一个比较函数作为参数,返回一个数值而不是布尔值

此比较功能需要遵循以下逻辑:

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;
}
在您的情况下,如果星号是一个数字,则可以按以下方式按降序排列阵列:

this.topPlayers.sort(function(a, b) {
  return b.stars - a.stars;
});

对于升序,只需返回a.stars-b.stars即可。

比较函数返回的是布尔值。Array.sort希望您返回一个数字

如果比较函数返回的值<0,“a”将置于“b”之前

如果比较函数返回的值大于0,“b”将置于“a”之前

如果比较函数返回0,则顺序将保持原样

因此,要按星星数降序排序,可以执行以下操作:

this.topPlayers.sort((a, b) => b.stars - a.stars);

如果“a”的星数大于“b”,则返回值将为负值,“a”将排序在“b”之前,反之亦然。

您的比较函数返回的是布尔值。Array.sort希望您返回一个数字

如果比较函数返回的值<0,“a”将置于“b”之前

如果比较函数返回的值大于0,“b”将置于“a”之前

如果比较函数返回0,则顺序将保持原样

因此,要按星星数降序排序,可以执行以下操作:

this.topPlayers.sort((a, b) => b.stars - a.stars);
如果“a”的星数大于“b”,则返回值将为负值,“a”将在“b”之前排序,反之亦然。

这是因为函数希望返回数值,而不是您给出的布尔值。负结果表示排序较低,0表示保持原样,正结果表示排序较高

在ES6中,使用类似以下内容:

让top10=this.topPlayers .sorta,b=>b.stars-a.stars .0,10; 让bottom10=this.topPlayers .sorta,b=>a.stars-b.stars .0,10; 这是因为期望它的函数返回一个数值,而不是您给出的布尔值。负结果表示排序较低,0表示保持原样,正结果表示排序较高

在ES6中,使用类似以下内容:

让top10=this.topPlayers .sorta,b=>b.stars-a.stars .0,10; 让bottom10=this.topPlayers .sorta,b=>a.stars-b.stars .0,10;
你能提供每个案例的样本输入和精确输出吗?我刚刚测试了您编写的排序回调,它应该可以工作。this.topPlayers和.sort之间有一个空格。我确定这是一个转录错误,但我想我应该指出。什么是.stars类型值?字符串,数字?日期对象数组?使用return a.stars-b.stars或return b.stars-a.stars我和另外两个人同时添加了一个答案,哈哈。但我必须指出,通过引用MDN,您可以很容易地回答自己的问题:您显然只是假设您知道Array.sort是如何工作的,而不需要查找它。您能否提供每个案例的示例输入和确切输出?我刚刚测试了您编写的排序回调,它应该可以工作。this.topPlayers和.sort之间有一个空格。我确定这是一个转录错误,但我想我应该指出。什么是.stars类型值?字符串,数字?日期对象数组?使用return a.stars-b.stars或return b.stars-a.stars我和另外两个人同时添加了一个答案,哈哈。但我必须指出,通过引用MDN,您可以很容易地回答您自己的问题:您显然只是假设您知道Array.sort是如何工作的,而没有查找它。奇怪的是,您对它进行了两次排序并对每个进行切片,而不是一次排序并通过handodd对其背面进行切片,即您对其进行了两次排序并对每个进行切片,而不是一次分拣,然后用手将背部切片