Javascript 按属性对嵌套对象排序无效

Javascript 按属性对嵌套对象排序无效,javascript,sorting,Javascript,Sorting,我试图根据对象中player实例的average属性对对象players进行排序,但我无法访问该对象以使其工作 这是我记录时玩家对象的样子: [ Player { player_id: 1, scores: [ 50 ], total: 50, average: 50 }, Player { player_id: 2, scores: [ 80, 70, 60 ], total: 210, average: 80 }, Player { player_id: 3, scores: [ 9

我试图根据对象中
player
实例的
average
属性对对象
players
进行排序,但我无法访问该对象以使其工作

这是我记录时玩家对象的样子:

[ Player { player_id: 1, scores: [ 50 ], total: 50, average: 50 },
  Player { player_id: 2, scores: [ 80, 70, 60 ], total: 210, average: 80 },
  Player { player_id: 3, scores: [ 90, 85 ], total: 175, average: 90 } ]
但是我的排序函数似乎没有什么用处——我想我需要在某个地方添加
player
来访问嵌套对象

下面是函数代码:

/* class definition excluded */

    top = (num_players) => 
      Object.values(this.players)
        .sort((a, b) => (a.average - b.average))
        .slice(0, num_players);
};
为此函数编写的测试将返回以下结果:

Top 3 [[object Object],[object Object],[object Object]] should equal [3, 2, 1]:
对于上下文,以下是包含测试用例的整个脚本,以防您想尝试:

职业玩家{
构造器(玩家id、分数){
this.player\u id=player\u id;
this.scores=[score];
总得分=总分;
this.average=this.averageScore();
}
添加分数(分数){
这个。总积分+=分数;
这个。得分。推(得分);
返回分数;
}
平均分数(){
返回this.scores.length?this.total/this.scores.length:0;
}
重置分数(){
这个。分数=[];
这个分数=0;
}
};
班级排行榜{
构造函数(){
this.players={};
}
添加分数(玩家id,分数){
如果(!this.players[player\u id]){
this.players[player\u id]=新玩家(player\u id,score);
}否则{
this.players[player\u id].addScore(score);
}
var average=this.players[player_id].averageScore();
返回平均值。toFixed(1);
}
top=(玩家数量)=>
//log(Object.values(this.players));
Object.values(this.players)
.排序((a,b)=>(a.平均值-b.平均值))
.slice(0,玩家数量);
重置=(玩家id)=>{
this.players[player_id].resetScore();
}
};
//测试代码在这里
函数数组_等于(a,b){
如果(a==b)返回true;
如果(a==null | | b==null)返回false;
如果(a.length!=b.length)返回false;
对于(变量i=0;i
  • 您正在将
    Player
    对象与对象本身的属性(
    Player\u id
    )进行比较。 正确的assert语句如下所示:
  • 如果排序功能方向错误,只需将其切换为:

  • 您当前得到的结果是什么?前3名[[对象对象],[对象对象对象],[对象对象]]应该等于[3,2,1]:
    引导板。Top
    返回一个
    玩家的数组;您的测试需要一个
    玩家id
    的数组。这是正确的吗?您看到
    [object object]
    当使用需要字符串的对象时。问题不在于排序,而在于如何处理结果。@Barmar那么我应该如何处理该对象?
    console.log(array_equals(leader_board.top(3).map(p => p.player_id), [3, 2, 1]))
    
        sort((a, b) => (b.average - a.average))