我有一组球队(在一个联盟中)是这样的:
var fra1 = {
"sports":[
{
"name":"soccer",
"id":600,
"uid":"s:600",
"leagues":[
{
"name":"French Ligue 1",
"abbreviation":"fra.1",
"id":710,
"isTournament":false,
"country":{
"id":7,
"name":"France",
"abbreviation":"FRA"
},
"uid":"s:600~l:710",
"groupId":9,
"shortName":"Ligue 1",
"teams":[
{
"id":159,
"uid":"s:600~t:159",
"location":"Bordeaux",
"name":"Bordeaux",
"nickname":"Bordeaux",
"abbreviation":"BOR",
"color":"00003e",
},
{
"id":160,
"uid":"s:600~t:160",
"location":"Paris Saint-Germain ",
"name":"Paris Saint-Germain ",
"nickname":"Paris Saint-Germain ",
"abbreviation":"PSG",
"color":"000040",
}
]
}
]
}
],
}
这样存储的每个var中大约有20支球队。然后,我有大约六个这样的联赛:eng1
、esp1
、fra1
、ger1
、ita1
和 usa1
。我将它们放在另一个集合中,如下所示:
var all = {
"eng1":eng1,
"esp1":esp1,
"fra1":fra1,
"ger1":ger1,
"ita1":ita1,
"usa1":usa1
}
现在,每支球队(无论他们所在的联赛)都有一个唯一的 ID:在上面的示例中,波尔多的 ID 为 159,PSG 的 ID 为 160,依此类推。因此,我希望能够使用 Underscore.js 在 all
集合中搜索 teamid
的独特团队,但我无法完全理解语法。我知道我可以像这样搜索一个联赛:
var obj = _.find(fra1.sports[0].leagues[0].teams, function(obj) { return obj.id == teamid })
但我不知道如何在所有六个联赛中做到这一点。谁能帮忙?我不希望手动将集合合并为一个集合,因为涉及的数据量会很麻烦。
编辑:我目前正在使用:
for (var league in all)
{
var obj = _.find(all[league].sports[0].leagues[0].teams, function(obj) { return obj.id == teamid })
if (obj !== undefined)
{
// do things
}
}
但还是想要更好的东西。
最佳答案
一个解决方案是创建一个团队 map ,其中团队 ID 为键,团队为值:
var teams = {};
_.each(all, function(nation){
_.each(nation.sports[0].leagues[0].teams, function(team){
teams[team.id] = team;
});
});
然后您可以使用 key 访问团队:
var psg = teams[160];
关于javascript - 使用 Underscore.js 在嵌套集合中查找对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22895882/