首页 > 解决方案 > JSON文件的前3个值

问题描述

如何仅发送 JSON 文件的前 3 个值?

xp.json

{
  "405778045941841923":{"xp":12601,"level":43},
  "437502925019807744":{"xp":221,"level":1},
  "258877808489660416":{"xp":6623,"level":23}, ...
}

index.js

if (cmd === `${prefix}list`) {
    console.log(Object.keys(xpfile).reduce((list, username) => {
        list += `${username}: XP: ${xp[username].xp}\n`
        return list
    }, ''))
}

输出:

405778045941841923: XP: 12601
437502925019807744: XP: 221
258877808489660416: XP: 6623
381904022132752384: XP: 81
170563606109356032: XP: 2116
375336450008416267: XP: 70
400012805018746891: XP: 3494
400731769927761941: XP: 9152
327157513105571840: XP: 11 ...

我将不胜感激任何代码示例,因为我很难在代码中调用 JSON 对象,我基本上只想显示前 3 个最高的 XP

标签: javascriptarraysjson

解决方案


我会排序,切片和减少

let j = {"405778045941841923":{"xp":12601,"level":43},"437502925019807744":{"xp":221,"level":1},"258877808489660416":{"xp":6623,"level":23}};
let top3 = Object.keys(j).sort((a, b) => j[b].xp - j[a].xp).slice(0, 3).reduce((a, b) => {
  a[b] = j[b];
  return a;
}, {});
console.log(top3);

如果您只想要没有其余对象的 xp,则可以使用以下内容

let top3 = Object.values(j).map(({xp}) => xp).sort((a, b) => b - a).slice(0, 3);
console.log(top3);

推荐阅读