Hola chicos, tengo un gran problema, he estado tratando de resolverlo durante días. Tengo un objeto JSON enredado (http://ddragon.leagueoflegends.com/cdn/9.1.1/data/de_DE/runesReforged.json) y, por ejemplo, esta matriz con mis ID en ella .

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

Y quiero que se busque la identificación con la ayuda de esta matriz en el objeto json. Y después de un partido, se debe devolver el contenido del "icono", pero no sé cómo :( Lo probé de muchas maneras, pero no tengo el resultado que quiero. Los ID están entre otros bajo the_json_object[0].slots[0].runes[0].id Leí que podía resolverlo con funciones recursivas, pero lo intenté y no obtuve el resultado deseado.

Tal vez ustedes puedan ayudarme :) estaría muy agradecido

-1
David Is'a Balla 10 may. 2019 a las 14:14

3 respuestas

La mejor respuesta

Si te he entendido correctamente, podrías hacer algo más o menos de la siguiente manera:

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

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

Luego, dado su objeto, puede mapear a través de sus elementos secundarios de la siguiente manera:

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);
});

Registrar el objeto de iconos le proporcionaría una serie de iconos de la siguiente manera:

["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"]

Espero que esto ayude.

Mate

1
Matt Jones 10 may. 2019 a las 13:58

Si desea una matriz plana con todos los íconos necesarios, puede usar algo como esto:

  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
                  });
              }
          }
      }
  }

La matriz the_icons - mantendrá objetos con id y su correspondiente icon como sus propiedades.

0
Jan 10 may. 2019 a las 12:00

Creo que la forma adecuada sería ordenar los datos. Puede hacer esto dividiendo la cadena. Si divide la cadena en función de los espacios en blanco, puede obtener pares de valores clave. Por ejemplo de cadena *

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

  • var res = str.split(" "); si divide con espacios en blanco, le proporcionará pares de valores clave a partir de los cuales puede formar una lista de objetos y le resultará fácil buscar desde allí.
0
ARK Niazi 10 may. 2019 a las 11:36