javascript - 为什么我不能按对象的实例排序?
问题描述
我正在尝试players
按每个玩家的平均得分对对象进行排序 - 然后返回数组中的前 3 名玩家。
我得到了sort is not a function
这让我觉得我没有在正确的数据类型上调用它(我试图按一个数字排序,称为“平均”)。
我尝试以多种方式编写该函数,希望能够访问in的average
属性但不断获取.player
players
sort is not a function
下面是我的代码(不包括已经工作的函数):
class Player {
constructor(player_id, score) {
this.player_id = player_id;
this.scores = [score];
this.total = score;
this.average = this.averageScore();
}
averageScore() {
return this.scores.length ? this.total / this.scores.length : 0;
}
};
class LeaderBoard {
constructor() {
this.players = {};
}
top = (num_players) => {
var sorted = this.players.sort((a, b) => (a.average > b.average) ? 1 : -1)
return sorted.slice(0, num_players);
}
};
我希望它num_players
在按平均值排序后返回一个索引数组,从 0 到它们,但是我得到了sort is not a function
- 我做错了什么?
解决方案
似乎您正在使用this.players
带有键作为玩家名称的对象。你想得到对象作为结果。如果是这种情况,请使用Objects.keys
前 3 名,然后用于reduce()
转换回对象。
var sorted = Object.entries(this.players)
.sort(([,v1], [,v2]) => v1.average - v2.average)
.slice(0,num_players)
.reduce((ac,[k]) => ({...ac,[k]:this.players[k]}),{})
推荐阅读
- javascript - Adobe InDesign Javascript 错误!错误号:55 错误字符串:对象不支持属性或方法“documentPreferences”
- php - 仅当表单通过错误检查时,如何转到表单提交的新页面?
- r - 基于闪亮仪表板中的多个 DT 行选择存储和打印单元格值
- python - 时间和空间复杂度比较:通过循环或dict(zip(s, t))将两个列表的元素添加到一个dict
- python - 翻转字典无法正常工作python
- reactjs - 如何防止电子反应应用程序的“导航到 http://localhost:3000/”
- flutter - 列表长度更改时 ListView 不更新
- xamarin - Xamarin App 模式 Release no found conexion sql
- reactjs - React-admin tinymce - 如何获取内容?
- amazon-web-services - AWS STS 临时凭证 InvokeFunction lambda 不起作用