javascript - 使用 Underscore.js 在嵌套集合中查找对象

标签 javascript jquery underscore.js

我有一组球队(在一个联盟中)是这样的:

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支球队。然后,我有大约六个这样的联赛:eng1esp1fra1ger1ita1usa1。我将它们放在另一个集合中,如下所示:

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/

相关文章:

javascript - 您需要在 $scope $destroy 事件中取消绑定(bind) $scope.$on 吗?

javascript - Angular 页面步骤不更新模型

jquery - 单击时更改 DIV 样式

c# - 哪种方法最适合使用 Rest API 的 GET、POST

javascript - Underscore/Coffeescript 生成一些奇怪的代码,如何重构代码覆盖率?

javascript注入(inject)网站黑客

javascript - list.js 的下拉列表 <select>

jquery - 使用 jQuery 验证为 div 设置验证

javascript - 为什么在支持 UnderscoreJS 的重命名函数中使用 apply ?

javascript - Underscore.js数组过滤