过滤对象中的最高数字

use*_*074 6 javascript ionic-framework ionic3

我有以下对象,每个人的运动点数.此信息来自数据库,基于搜索"杰克米勒"

Jdata = {
    "name": "Jack Miller",
    "sports": {
        "Basketball": 2,
        "Football": 3,
        "Iceskating": 5,
        "Running": 4,
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在我的HTML页面上显示名称的前2(3)项运动.做到这一点,我正在考虑将信息提取到这样的数组中:

SportVal = [];
SportNames = [];

for(var key in this.Jdata.sports){
    if(!this.Jdata.sports.hasOwnProperty(key)){
        continue;
    }
    this.SportVal.push(this.Jdata.scores[key]);
    this.SportNames.push(key)
}
Run Code Online (Sandbox Code Playgroud)

然后我必须按降序对SportVal数组进行排序,并且可以在HTML中使用例如ngFor来显示结果.

但是,我如何取回相应的名称?此外,我认为这不是最有效的方法,因为如果分数相等,我会遇到问题.所以你可能更好地了解如何做到这一点?

ale*_*lex 6

你可以Array.prototype.sort()用来做.

Jdata = {
"name": "Jack Miller",
"sports": {
    "Basketball": 2,
    "Football": 3,
    "Iceskating": 5,
    "Running": 4,
}
}

const sorted = Object.entries(Jdata.sports)
      .sort((a, b) => b[1] - a[1])
      .slice(0, 3)
      .map((pair) => pair[0]);

console.log(sorted);
Run Code Online (Sandbox Code Playgroud)