【发布时间】:2017-09-03 16:19:16
【问题描述】:
鉴于各种口袋妖怪对战的 JSON:
[
{
"battleID": "1",
"trainers": [
{
"LastName": "Ketchum",
"ForeName": "Ash"
},
{
"LastName": "Mason",
"ForeName": "Misty"
}
]
},
{
"battleID": "2",
"trainers": [
{
"LastName": "Mason",
"ForeName": "Misty"
},
{
"LastName": "Brock",
"ForeName": "Stuart"
},
{
"LastName": "Ian",
"ForeName": "Foster"
}
]
},
{
"battleID": "3",
"trainers": [
{
"LastName": "Brock",
"ForeName": "Stuart"
},
{
"LastName": "Ketchum",
"ForeName": "Ash"
}
]
}
]
我想绘制一个网格来计算两个口袋妖怪训练师/玩家之间的比赛次数。一场比赛最多可以同时有 4 名玩家。
Ash Ketchum Misty Mason Brock Stuart Ian Foster
Ash Ketchum 2 1 1 0
Misty Mason 1 2 1 1
Brock Stuart 1 1 2 1
Ian Foster 0 1 1 1
我的代码:
class Trainer {
constructor(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
coBattles(trainer) {
var battles = 0;
jsonData.map(x => {
x.trainers.map(y => {
if (this.firstname === y.ForeName && this.lastname === y.LastName) {
x.trainers.map(z => {
if (trainer.firstname === z.ForeName && trainer.lastname === z.LastName)
battles++;
});
}
});
});
return battles;
}
}
var pokemonTrainers = [];
// Currently Undesirable as I want a 'unique' array of all participating trainers.
jsonData.forEach(x => {
x.trainers.forEach(y => {
var trainer = new Trainer(y.ForeName, y.LastName);
pokemonTrainers.push(trainer);
});
});
//Battles between Misty Mason and Brock Stuart
console.log(pokemonTrainers[1].coBattles(pokemonTrainers[3]));
//returns 1
我正在寻找有关是否可以在 vanilla JS/ 中使用第三方库做得更好的建议。我怎样才能让它足够高效地处理大量的战斗数据(数百万)。
【问题讨论】:
-
只是一个注释,Array.map/forEach 和其他内置函数目前比 V8 中的普通 for 循环慢(Chrome 和 Node,js)
标签: javascript arrays json algorithm object