Tengo un objeto específico que necesito obtener de otra matriz que es hexCode

Esta es la información que estoy filtrando

{
  dateCreated: "2019-10-30 08:29:54 PM" 

  hexCode: "#ed4c67"

  id: 1

  leaveTag: "Vacation Leave"

  leaveTagColor: "Bara Red"
}
{
  dateCreated: "2019-10-30 08:30:05 PM"

  hexCode: "#ea2027"
  
  id: 2

  leaveTag: "Sick Leave"
  
  leaveTagColor: "Red Pigment"
}

Estos son los datos donde quiero insertar el código hexadecimal. Y asigna el leaveType para compararlo con los datos anteriores. ¿Será eso posible?

{
  leaveType: "Emergency Leave"
  email: "sfe.bruce.logan@gmail.com"
  hexCode: ???
}
{
  leaveType: "Sick Leave"
  email: "sfe.bruce.logan@gmail.com"
  hexCode: ???
}
0
Alyssa Reyes 30 oct. 2019 a las 15:44

3 respuestas

La mejor respuesta

Mi enfoque usando solo el mapa de matriz

const obj1 = [{
  dateCreated: "2019-10-30 08:29:54 PM",
  hexCode: "#ed4c67",
  id: 1,
  leaveTag: "Vacation Leave",
  leaveTagColor: "Bara Red"
},
{
  dateCreated: "2019-10-30 08:30:05 PM",
  hexCode: "#ea2027",
  id: 2,
  leaveTag: "Sick Leave",
  leaveTagColor: "Red Pigment"
}]


const obj2 = [{
  leaveType: "Emergency Leave",
  email: "sfe.bruce.logan@gmail.com",
  hexCode: null
},
{
  leaveType: "Sick Leave",
  email: "sfe.bruce.logan@gmail.com",
  hexCode: null
}]
const result = obj2.map(item => {
  const findedHex = obj1.find(o2item => o2item.leaveTag == item.leaveType)
  item.hexCode = findedHex && findedHex.hexCode || null;
  return item;

})
console.log(result)
0
David 30 oct. 2019 a las 13:01

Simplemente puede hacer una búsqueda como a continuación, pero la complejidad del tiempo es mayor en este caso (aunque mayor legibilidad y sin complejidad de espacio)

O bien, puede crear un Mapa del tipo leaveType : hexCode a partir de la primera matriz de datos y luego usar el Mapa para encontrar el valor correspondiente y llenar la segunda matriz. Verifique la respuesta de @ CodeManiac para este enfoque.

const data = [{
  dateCreated: "2019-10-30 08:29:54 PM",
  hexCode: "#ed4c67",
  id: 1,
  leaveTag: "Vacation Leave",
  leaveTagColor: "Bara Red"
},
{
  dateCreated: "2019-10-30 08:30:05 PM",
  hexCode: "#ea2027",
  id: 2,
  leaveTag: "Sick Leave",
  leaveTagColor: "Red Pigment"
}]

const arr = [{
  leaveType: "Emergency Leave",
  email: "sfe.bruce.logan@gmail.com",
},
{
  leaveType: "Sick Leave",
  email: "sfe.bruce.logan@gmail.com"
}]

arr.forEach(leave => {
 const matchedLeave = data.find(lv => lv.leaveTag === leave.leaveType);
 if(matchedLeave) {
   leave.hexCode = matchedLeave.hexCode;
 }
});
 
console.log(arr);
0
Dhananjai Pai 30 oct. 2019 a las 12:51

Puede usar Map y map

  • Mapa leaveTag a los respectivos hexCode
  • Pase el cursor sobre la verificación de datos si leaveType existe en Map si existe, use el valor de Map, de lo contrario mantenga el valor original
const data = [{dateCreated: "2019-10-30 08:29:54 PM",hexCode: "#ed4c67",id: 1,leaveTag: "Vacation Leave",leaveTagColor: "Bara Red"}, {dateCreated: "2019-10-30 08:30:05 PM",hexCode: "#ea2027",id: 2,leaveTag: "Sick Leave",leaveTagColor: "Red Pigment",}]
const desiredFormat = [{leaveType: "Emergency Leave",email: "sfe.bruce.logan@gmail.com",hexCode: ''}, {leaveType: "Sick Leave",email: "sfe.bruce.logan@gmail.com",hexCode: ''}]

const mapper = new Map(data.map(({leaveTag,hexCode}) => [leaveTag, hexCode]))

const final = desiredFormat.map(({ hexCode, ...rest }) => {
  return {
    ...rest,
    hexCode: mapper.get(rest.leaveType) || hexCode
  }
})
console.log(final)
0
Code Maniac 30 oct. 2019 a las 12:53