Как данные должны быть помещены в секцию фильтруемого объекта в массиве? - PullRequest
3 голосов
/ 02 июля 2019

Я получаю сервис от сервера и json, который возвращает (см. Ссылку). Мне нужно снять его с охраны, чтобы включить его в соответствии с потребностями, которые у меня есть.

JSON FROM SERVICE

[
  {
    "id_clasificacion":"1",
    "pj_clasificacion":"0",
    "pg_clasificacion":"0",
    "pe_clasificacion":"0",
    "pp_clasificacion":"0",
    "dg_clasificacion":"0",
    "ta_clasificacion":"0",
    "tr_clasificacion":"0",
    "jl_clasificacion":"0",
    "pts_clasificacion":"0",
    "id_equipo":"1",
    "nombre_equipo":"Real Madrid CF",
    "nombre_grupo":"Grupo A"
  },
  {
    "id_clasificacion":"2",
    "pj_clasificacion":"0",
    "pg_clasificacion":"0",
    "pe_clasificacion":"0",
    "pp_clasificacion":"0",
    "dg_clasificacion":"0",
    "ta_clasificacion":"0",
    "tr_clasificacion":"0",
    "jl_clasificacion":"0",
    "pts_clasificacion":"0",
    "id_equipo":"2",
    "nombre_equipo":"Barcelona CF",
    "nombre_grupo":"Grupo B",
  },
  {
    "id_clasificacion":"3",
    "pj_clasificacion":"0",
    "pg_clasificacion":"0",
    "pe_clasificacion":"0",
    "pp_clasificacion":"0",
    "dg_clasificacion":"0",
    "ta_clasificacion":"0",
    "tr_clasificacion":"0",
    "jl_clasificacion":"0",
    "pts_clasificacion":"0",
    "id_equipo":"3",
    "nombre_equipo":"Bayern Munchen",
    "nombre_grupo":"Grupo B"
  },
  {
    "id_clasificacion":"5",
    "pj_clasificacion":"0",
    "pg_clasificacion":"0",
    "pe_clasificacion":"0",
    "pp_clasificacion":"0",
    "dg_clasificacion":"0",
    "ta_clasificacion":"0",
    "tr_clasificacion":"0",
    "jl_clasificacion":"0",
    "pts_clasificacion":"0",
    "id_equipo":"4",
    "nombre_equipo":"Atletico de Madrid",
    "nombre_grupo":"Grupo C"
  },
  {
    "id_clasificacion":"6",
    "pj_clasificacion":"0",
    "pg_clasificacion":"0",
    "pe_clasificacion":"0",
    "pp_clasificacion":"0",
    "dg_clasificacion":"0",
    "ta_clasificacion":"0",
    "tr_clasificacion":"0",
    "jl_clasificacion":"0",
    "pts_clasificacion":"0",
    "id_equipo":"5",
    "nombre_equipo":"Chelsea FC",
    "nombre_grupo":"Grupo C"
  }
];

Все эти данные имеют общую характеристику, которая называется "nombre_grupo", при этом я намерен организовать данные во внешнем интерфейсе, как если бы они были упорядочены с заголовком в алфавитном порядке, нов этом случае я буду использовать вышеупомянутое:

|---------------------|------------------|
|        GRUPO A      |      GRUPO B     |
|---------------------|------------------|
|     Real Madrid     |     Chelsea      |
|     Barcelona       |  Manchester City |
|     Atl. Madrid     |  Manchester Untd |

Это тип соглашения, которое я должен получить с данными, полученными из службы:

[
 {
   grupo: Grupo A,
   equipos :
   [
     {
       id_clasificacion:'information',
       nombre_equipo:'information',
       pj_clasificacion:'information',
       pg_clasificacion:'information',
       pe_clasificacion:'information',
       pp_clasificacion:'information',
       dg_clasificacion:'information',
       ta_clasificacion:'information',
       tr_clasificacion:'information',
       jl_clasificacion:'information',
       pts_clasificacion:'information',
     }
   ]
 }
];

ПРОБЛЕМА

тогда моя проблема заключается в том, что при попытке перенести данные в новое расположение я не знаю, как перенести их в соответствующий раздел, в этом случае он вставляет их как новый объект, ноон должен принадлежать к соответствующей категории:

0: Object { name_group: "Grupo A", teams_group: (1) […] }​
1: Object { name_group: "Grupo B", teams_group: (1) […] }​
2: Object { name_group: "Grupo B", teams_group: (1) […] }​
3: Object { name_group: "Grupo C", teams_group: (1) […] }​
4: Object { name_group: "Grupo C", teams_group: (1) […] }

ЧТО Я СДЕЛАЛ?

//Recorremos los datos obtenidos
for (var i = 0; i < data.length; i++)
  {
    //Evaluamos si el arreglo no tiene datos
    if (this.list_groups.length == 0)
    {
      //Empujamos el primer valor para llenar el arreglo
      this.list_groups.push(
        {
          name_group: data[i].nombre_grupo,
          teams_group: [
            {
              id_clasificacion:data[i].id_clasificacion,
              nombre_equipo:data[i].nombre_equipo,
              pj_clasificacion:data[i].pj_clasificacion,
              pg_clasificacion:data[i].pg_clasificacion,
              pe_clasificacion:data[i].pe_clasificacion,
              pp_clasificacion:data[i].pp_clasificacion,
              dg_clasificacion:data[i].dg_clasificacion,
              ta_clasificacion:data[i].ta_clasificacion,
              tr_clasificacion:data[i].tr_clasificacion,
              jl_clasificacion:data[i].jl_clasificacion,
              pts_clasificacion:data[i].pts_clasificacion
            }
          ]
        }
      );
    }
    else
    {
      //Filtramos el arreglo
      let approved = this.list_groups.filter(element => element.name_group == data[i].nombre_grupo);

      //Evaluamos si el arreglo obtuvo un valor vacio
      if (approved.length == 0)
      {
        //Empujamos el valor al arreglo final
        this.list_groups.push(
          {
            name_group: data[i].nombre_grupo,
            teams_group: [
              {
                id_clasificacion:data[i].id_clasificacion,
                nombre_equipo:data[i].nombre_equipo,
                pj_clasificacion:data[i].pj_clasificacion,
                pg_clasificacion:data[i].pg_clasificacion,
                pe_clasificacion:data[i].pe_clasificacion,
                pp_clasificacion:data[i].pp_clasificacion,
                dg_clasificacion:data[i].dg_clasificacion,
                ta_clasificacion:data[i].ta_clasificacion,
                tr_clasificacion:data[i].tr_clasificacion,
                jl_clasificacion:data[i].jl_clasificacion,
                pts_clasificacion:data[i].pts_clasificacion
              }
            ]
          }
        );
      }
      else
      {
        //Empujamos el valor al arreglo final
        this.list_groups.push(
          {
            name_group: data[i].nombre_grupo,
            teams_group: [
              {
                id_clasificacion:data[i].id_clasificacion,
                nombre_equipo:data[i].nombre_equipo,
                pj_clasificacion:data[i].pj_clasificacion,
                pg_clasificacion:data[i].pg_clasificacion,
                pe_clasificacion:data[i].pe_clasificacion,
                pp_clasificacion:data[i].pp_clasificacion,
                dg_clasificacion:data[i].dg_clasificacion,
                ta_clasificacion:data[i].ta_clasificacion,
                tr_clasificacion:data[i].tr_clasificacion,
                jl_clasificacion:data[i].jl_clasificacion,
                pts_clasificacion:data[i].pts_clasificacion
              }
            ]
          }
        );
      }
    }
  }
  console.log("Data: ", this.list_groups);

Логическая последовательность:

1. Go through the arrangement obtained from the service
2. Evaluate if the secondary array has data equal to 0
   2.1 if you do not have data, you enter the first value obtained by default
   2.2 if it contains data, the secondary array is filtered to identify some match
    2.2.1 if it finds a match, then it will be added only to the found group section.
    2.2.2 if there is no match, the object is registered in the secondary array

Примечание: если вы думаете,дайте мне знать, есть что улучшить в прикрепленном коде.Спасибо

1 Ответ

1 голос
/ 02 июля 2019

Если я правильно понимаю вопрос, вы пытаетесь поместить каждый элемент полученного JSON в соответствующие группы.

Вы можете сделать это следующим образом:

// Store JSON data from the service in 'data' variable.
var data; 

var groupsMap = new Map();

// Iterate over the data array.
data.forEach((element) => {

   const groupName = element.nombre_grupo;

   delete element.nombre_grupo;

   var value;

   // If group already exists in the map, get current value.
   if (groupsMap.has(groupName)) {

     value = groupsMap.get(groupName);

   } else {
       value = {
         'grupo': groupName,
         'equipos': []
       };
   }

   // Add current element to the group's equipos list.
   value.equipos.push(element);

   // Add updated value to the map.
   groupsMap.set(groupName, value);
});

Теперь у нас есть карта с именами групп в качестве ключей и соответствующими значениями в требуемом формате.

Мы можем перебрать карту для доступа к этим значениям.

Надеюсь, это поможет. Дайте мне знать, если у вас есть какие-либо вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...