JSON对象出现问题(深度搜索)

时间:2019-05-10 11:14:39

标签: javascript

伙计们,我有一个大问题,我已经尝试解决了好几天。我有一个纠缠的JSON对象(http://ddragon.leagueoflegends.com/cdn/9.1.1/data/de_DE/runesReforged.json),例如,其中有我的ID的数组。

0: 8214 1: 8112 2: 8005 3: 8010 4: 8112 5: 8359 6: 8437 7: 9923 8: 8112 9: 8021 

我想在json对象中借助此数组搜索id。匹配之后,应返回“ icon”的内容, 但我不知道如何:( 我尝试了很多方法,但是我没有想要的结果。该ID在the_json_object[0].slots[0].runes[0].id下 我读到您可以使用递归函数来解决它,但是我尝试了但没有得到期望的结果。

也许你们可以帮助我:)我将非常感谢

3 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,则可以执行以下大致操作:

var ids = [8214,8112,8005,8010,8112,8359,8437,9923,8112,8021];
var results = [];

ids.map(function(id) {
    results.push({key: id, icon: ''});
});

然后给定对象,您可以将其映射为以下对象的子对象:

the_json_object.map(function(item){
    item.slots.map(function(slot){
        slot.runes.map(function(rune){

            if(ids.indexOf(rune.id) != -1) {
                results.map(function(result){
                    if(result.key == rune.id) result.icon = rune.icon;
                });                           
            }

        });     
    });
});

var icons = [];
results.map(function(result){
  icons.push(result.icon);
});

记录图标对象将为您提供图标的字符串数组,如下所示:

["perk-images/Styles/Domination/Electrocute/Electrocute.png", "perk-images/Styles/Domination/HailOfBlades/HailOfBlades.png", "perk-images/Styles/Inspiration/Kleptomancy/Kleptomancy.png", "perk-images/Styles/Precision/PressTheAttack/PressTheAttack.png", "perk-images/Styles/Precision/FleetFootwork/FleetFootwork.png", "perk-images/Styles/Precision/Conqueror/Conqueror.png", "perk-images/Styles/Resolve/GraspOfTheUndying/GraspOfTheUndying.png", "perk-images/Styles/Sorcery/SummonAery/SummonAery.png"]

希望这会有所帮助。

马特

答案 1 :(得分:0)

我认为合适的方法是对数据进行排序。您可以通过拆分字符串来做到这一点。 如果您根据空格分割字符串,则可以获得键值对。 例如来自字符串*

  

0:8214 1:8112 2:8005 3:8010 4:8112 5:8359 6:8437 7:9​​923 8:8112 9:8021

  • var res = str.split(" "); 如果用空格分割,它将为您提供键值对,从中可以形成对象列表,并且可以轻松地从中进行搜索。

答案 2 :(得分:0)

如果您想要一个带有所有所需图标的平面阵列,则可以使用以下内容:

  let the_runes = [ 8214, 8112, 8005 /* ... */ ];
  let the_icons = [];

  for (let first_level_obj of the_json_object) {
      for (let slot_obj of first_level_obj.slots) {
          for (let rune_obj of slot_obj.runes) {
              if (the_runes.includes(rune_obj.id)) {
                  the_icons.push({
                      id: rune_obj.id,
                      icon: rune_obj.icon
                  });
              }
          }
      }
  }

the_icons数组将保存具有id及其对应的icon作为其属性的对象。