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即可。
添加回答
举报
