Javascript 通过动态(更改)数组大小的JSON字符串进行跟踪
我试图在JSON数组中导航,其中一些对象的大小可能会有所不同。JSON代码段太大,无法发布,因此我将其发布在JSON Blob上,,并尝试遍历此结构,获取其属性中具有最高值的对象 在下图中,我试图抓取在“TotalSessionPlayed”中数量最多的“champion”对象 我的问题是找出如何循环,然后捕获总会话值,然后比较它们,最终检索总会话数最高的冠军对象。我习惯于对值/路径进行硬编码,因为它总是静态地设置大小,而在这里大小可以改变 我相信我需要做以下几点……但我不能完全确定Javascript 通过动态(更改)数组大小的JSON字符串进行跟踪,javascript,jquery,json,Javascript,Jquery,Json,我试图在JSON数组中导航,其中一些对象的大小可能会有所不同。JSON代码段太大,无法发布,因此我将其发布在JSON Blob上,,并尝试遍历此结构,获取其属性中具有最高值的对象 在下图中,我试图抓取在“TotalSessionPlayed”中数量最多的“champion”对象 我的问题是找出如何循环,然后捕获总会话值,然后比较它们,最终检索总会话数最高的冠军对象。我习惯于对值/路径进行硬编码,因为它总是静态地设置大小,而在这里大小可以改变 我相信我需要做以下几点……但我不能完全确定 json
json = JSON && JSON.parse(response) || $.parseJSON(response);
$.each(json, function (i, el) {
if (el.stats.totalSessionsPlayed > highestSession)
{
highestSession = el.stats.totalSessionsPlayed...?
}
});
//when done, somehow get the champion object that relates to that highestSession value.
我对JSON还是新手,只是在遍历这个动态大小的JSON时迷失了方向
获得totalSessionPlayed
值最高的冠军;并使用==
确定是否已经有另一位冠军拥有相同的最高分数var highestSession = -1; // set it low initially
var topChamps = []; // array since could be a N-way tie
$.each(json.champions, function(idx, champion) {
if (champion.id > 0 && champion.stats) {
if (champion.stats.totalSessionsPlayed > highestSession) {
// new top score broke any possible ties
topChamps = [champion]; // new array
highestSession = champion.stats.totalSessionsPlayed; // save new max value
} else if (champion.stats.totalSessionsPlayed === highestSession) {
// it's a tie, add to list
topChamps[topChamps.length] = champion;
}
}
});
针对OP的实际JSON数据运行此示例代码段:
//伪json仅供示例
var json={
“召唤号”:22421317,
“修改日期”:1414692614000,
“冠军”:[{
“id”:110,
“统计数据”:{
“TotalSessionPlayed”:5,
“totalSessionsLost”:5,
“totalSessionsWon”:0,
“totalChampionKills”:32,
“总损失处理”:725106,
“总损失”:113405,
“mostChampionKillsPerSession”:13,
“totalMinionKills”:937,
“totalDoubleKills”:3,
“totalTripleKills”:0,
“totalQuadraKills”:0,
“totalPentaKills”:0,
“totalUnrealKills”:0,
“死亡总人数”:52,
“总收入”:62141,
“mostSpellsCast”:0,
"全日制":6,,
“处理的总物理损伤”:613669,
“TotalMagicDamageDealed”:105253,
“totalFirstBlood”:0,
“总协助”:55,
“maxChampionsKilled”:13,
“最大死亡数”:14
}
}, {
“id”:21,
“统计数据”:{
“TotalSessionPlayed”:7,
“totalSessionsLost”:1,
“totalSessionsWon”:6,
“totalChampionKills”:54,
“总损失处理”:1143509,
“总损失”:132528,
“mostChampionKillsPerSession”:18,
“totalMinionKills”:1420,
“totalDoubleKills”:7,
“totalTripleKills”:1,
“totalQuadraKills”:0,
“totalPentaKills”:0,
“totalUnrealKills”:0,
“死亡总人数”:56,
“Totalgoldworned”:99924,
“mostSpellsCast”:0,
“总数”:24,
“总物理损伤处理”:973400,
“TotalMagicDamageDealed”:159071,
“totalFirstBlood”:0,
“总助攻”:67,
“maxChampionsKilled”:18岁,
“最大死亡数”:11
}
}, {
“id”:19,
“统计数据”:{
“TotalSessionPlayed”:18,
“totalSessionsLost”:9,
“totalSessionsWon”:9,
“totalChampionKills”:94,
“TotalDamageDealed”:1864380,
“TotalDamageTake”:764921,
“mostChampionKillsPerSession”:12,
“totalMinionKills”:923,
“totalDoubleKills”:3,
“totalTripleKills”:0,
“totalQuadraKills”:0,
“totalPentaKills”:0,
“totalUnrealKills”:0,
“死亡总人数”:154,
“总收入”:212650,
“mostSpellsCast”:0,
“总计”:14,
“处理的总物理损伤”:932921,
“TotalMagicDamageDealed”:565418,
“totalFirstBlood”:0,
“总协助”:241,
“maxChampionsKilled”:12,
“最大死亡数”:12
}
}, {
“id”:89,
“统计数据”:{
“TotalSessionPlayed”:41,
“totalSessionsLost”:15,
“totalSessionsWon”:26,
“totalChampionKills”:162,
“总损失处理”:1655899,
“总损失”:1322562,
“mostChampionKillsPerSession”:12,
“总仆从杀手”:1684,
“totalDoubleKills”:6,
“totalTripleKills”:1,
“totalQuadraKills”:0,
“totalPentaKills”:0,
“totalUnrealKills”:0,
“死亡总人数”:318,
“Totalgoldrend”:447598,
“mostSpellsCast”:0,
“总数”:16,
“总物理损伤处理”:434852,
“TotalMagicDamageDealed”:1042032,
“totalFirstBlood”:0,
“总计协助”:716,
“maxChampionsKilled”:12,
“最大死亡数”:14
}
}, {
“id”:9,
“统计数据”:{
“TotalSessionPlayed”:1,
“totalSessionsLost”:1,
“totalSessionsWon”:0,
“totalChampionKills”:14,
“总损失处理”:269323,
“总损失”:43294,
“mostChampionKillsPerSession”:14,
“总仆从杀手”:91,
“totalDoubleKills”:2,
“totalTripleKills”:0,
“totalQuadraKills”:0,
“totalPentaKills”:0,
“totalUnrealKills”:0,
“死亡总动员”:6,
“Totalgoldworned”:18899,
“mostSpellsCast”:0,
"总体":1,,
“已处理的总体物理损伤”:17923,
“TotalMagicDamageDealed”:236252,
“totalFirstBlood”:0,
“总助攻”:18,
“maxChampionsKilled”:14,
“最大死亡数”:6
}
}, {
“id”:10,
“统计数据”:{
“TotalSessionPlayed”:2,
“totalSessionsLost”:1,
“totalSessionsWon”:1,
“totalChampionKills”:14,
“总损失处理”:229398,
“总损失”:50962,
“mostChampionKillsPerSession”:13,
“总仆从杀手”:250,
“totalDoubleKills”:2,
“totalTripleKills”:0,
“totalQuadraKills”:0,
“totalPentaKills”:0,
“totalUnrealKills”:0,
“死亡总人数”:16,
“总收入”:22793,
var bestChamp = json.champions.reduce(function (prev, next) {
if (prev.stats.totalSessionsPlayed >= next.stats.totalSessionsPlayed) {
return prev;
} else {
return next;
}
});
// bestChamp contains the object
var bestChamp = json.champions.reduce(function (prev, next) {
if (next.id === 0) {
return prev;
}
if (prev.stats.totalSessionsPlayed >= next.stats.totalSessionsPlayed) {
return prev;
} else {
return next;
}
});
// bestChamp contains the object
json.champions.reduce(function(current, champ) {
return champ.stats.totalSessionsPlayed > current.stats.totalSessionsPlayed
? champ : current;
});