Compare 2 arrays and create a new array if they have the same ID

2

I have 2 arrays:

array1 = [
...
  {
   "id_projeto": 4,
   "sigla": "ADM-APR",
   "nome": "Administração APR",
   "descricao": null,
   "atividades": [ 13, 14, 49, 80, 81, 82 ] // id
  }
...
];

array2 = [
...
  }
    "id_atividade": 49, //id
    "codigo": "P46",
    "nome": "Treinamento de Instalação e Manutenção",
    "data_inicio": "2017-04-01",
    "data_fim": "2017-04-30",
    "prioridade": "1 ",
  },
  }
    "id_atividade": 50, //id
    "codigo": "P47",
    "nome": "Manutenção das estações",
    "data_inicio": "2017-04-01",
    "data_fim": "2017-04-30",
    "prioridade": "1 ",
  }
...
];

I have to create a new array with the activities (array2) of each project (array1), it would look something like this:

array3 = [
...
  {
    "sigla": "ADM-APR",
    "nome_projeto": "Administração APR",
    "descricao": null,
    "id_atividades": [ 13, 14, 49, 80, 81, 82 ],
    "atividades": [
      {
       "id_atividade": 49,
       "codigo": "P46",
       "nome": "Treinamento de Instalação e Manutenção",
       "data_inicio": "2017-04-01",
       "data_fim": "2017-04-30",
       "prioridade": "1 ",
      },
      ...
    ]
  }
...
];
array3 = array1.atividades.map(obj => {
        array2(ativ => {
            if(obj == ativ.id_atividade){
                return console.log(ativ)
            }
        })
    });

When returning the result in console.log, the response is as expected, when returning the response the array receives the number of correct activities, but, undefined.

    
asked by anonymous 02.11.2017 / 10:23

1 answer

3

You can copy each object in the array to avoid changing data outside this mapping, and then map the atividades property one by one by looking at array2 by the corresponding object using .find() that returns the element that checks the iterado.id_atividade == id_procurada .

var array1 = [{
  "id_projeto": 4,
  "sigla": "ADM-APR",
  "nome": "Administração APR",
  "descricao": null,
  "atividades": [13, 14, 49, 80, 81, 82] // ids
}];

var array2 = [{
    "id_atividade": 49, //id
    "codigo": "P46",
    "nome": "Treinamento de Instalação e Manutenção",
    "data_inicio": "2017-04-01",
    "data_fim": "2017-04-30",
    "prioridade": "1 ",
  },
  {
    "id_atividade": 50, //id
    "codigo": "P47",
    "nome": "Manutenção das estações",
    "data_inicio": "2017-04-01",
    "data_fim": "2017-04-30",
    "prioridade": "1 ",
  }
];

var array3 = array1.map(obj => {
  const novoObjecto = JSON.parse(JSON.stringify(obj)); // cria uma cópia
  novoObjecto.id_atividades = novoObjecto.atividades; // guardar a array de IDs original
  novoObjecto.atividades = novoObjecto.atividades.map(id => array2.find(el => el.id_atividade == id));
  return novoObjecto;
});

console.log(array3);

Using the second example of your code would look like this:

const atividadesList = [{
    "id_atividade": 1,
    "codigo": "P1",
    "nome": "Operação SEMANAL do marégrafo convencional da EMFOR (CE)",
    "data_inicio": "2017-01-01",
    "data_fim": "2017-01-31",
    "prioridade": "1 "
  },
  {
    "id_atividade": 39,
    "codigo": "P1",
    "nome": "Operação SEMANAL do marégrafo convencional da EMFOR (CE)",
    "data_inicio": "2017-02-01",
    "data_fim": "2017-02-28",
    "prioridade": "1 "
  },
  {
    "id_atividade": 6,
    "codigo": "P1",
    "nome": "Operação SEMANAL do marégrafo convencional da EMFOR (CE)",
    "data_inicio": "2017-06-01",
    "data_fim": "2017-06-30",
    "prioridade": "1 "
  },
  {
    "id_atividade": 32,
    "codigo": "P1",
    "nome": "Operação SEMANAL do marégrafo convencional da EMFOR (CE)",
    "data_inicio": "2017-07-01",
    "data_fim": "2017-07-31",
    "prioridade": "1 "
  },
  {
    "id_atividade": 28,
    "codigo": "P1",
    "nome": "Operação SEMANAL do marégrafo convencional da EMFOR (CE)",
    "data_inicio": "2017-08-01",
    "data_fim": "2017-08-31",
    "prioridade": "1 "
  },
  {
    "id_atividade": 19,
    "codigo": "P1",
    "nome": "Operação SEMANAL do marégrafo convencional da EMFOR (CE)",
    "data_inicio": "2017-09-01",
    "data_fim": "2017-09-30",
    "prioridade": "1 "
  }
];

const atividadesId = [10, 19, 28];


const atividades = atividadesId.map(
  id => atividadesList.find(obj => obj.id_atividade == id) || {}
);
    
02.11.2017 / 10:30