[英]Sort JSON by array key value
我有一个包含以下内容的示例JSON文件:
{
"119996306407030785": {
"duel": {
"class": "mage",
"totalDamage": 64,
"wins": 5,
"losses": 2
},
"weather": {
"location": "46544"
}
},
"119333755579138048": {
"duel": {
"class": "rogue",
"totalDamage": 35,
"losses": 1,
"wins": 2
},
"weather": {
"location": "95825"
}
},
"112006834713329664": {
"duel": {
"totalDamage": 33,
"losses": 1,
"wins": 7
}
}
}
119996306407030785
是一个用户ID。 我想按“前5名”概念中所有用户的最高对决。
我想要上述JSON的输出为:
112006834713329664 - 7 wins
119996306407030785 - 5 wins
119333755579138048 - 2 wins
在谷歌搜索时,我已经看到多个与此问题相关的问题,但是找不到与我的设置类似的JSON问题。
考虑到我的userID的设置方式和随机性,这是否可行? 如果是这样,怎么办? 请注意,我不仅需要返回获胜次数,还需要与该获胜金额相关的userID。 即使有许多userID,我也只想返回前5名。
var data = { "119996306407030785": { "duel": { "class": "mage", "totalDamage": 64, "wins": 5, "losses": 2 }, "weather": { "location": "46544" } }, "119333755579138048": { "duel": { "class": "rogue", "totalDamage": 35, "losses": 1, "wins": 2 }, "weather": { "location": "95825" } }, "112006834713329664": { "duel": { "totalDamage": 33, "losses": 1, "wins": 7 } } } var a = Object.keys(data).map(e => ({id: e, wins: data[e].duel.wins})) .sort((a, b) => b.wins - a.wins); document.write('<pre>' + JSON.stringify(a, 0, 2) + '</pre>')
要按duel.wins
对对象进行排序, duel.wins
尝试以下操作
function sortByWins(obj) {
return Object.keys(obj).sort(function(i, j) {
return obj[i].duel.wins - obj[j].duel.wins;
}).reduce(function (result, key) {
result[key] = obj[key];
return result;
}, {});
}
使用以下键循环遍历对象:
Object.keys(obj).reduce(function (p, c) {
// return an array of winner objects
return p.concat({ id: c, wins: obj[c].duel.wins });
}, []).sort(function (a, b) {
// sort the objects by wins
return a.wins < b.wins;
}).forEach(function (el) {
// Display the information
console.log([el.id,'-',el.wins,'wins'].join(' '));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.