Фильтровать и назначать объект из массива другому объекту - PullRequest
0 голосов
/ 30 октября 2019

У меня есть конкретный объект, который мне нужно получить из другого массива, который является hexCode

Это данные, которые я фильтрую

{
  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"
}

Это данные, гдеЯ хочу вставить hexCode. И сопоставляем leaveType, чтобы сравнить его с данными выше. Это будет возможно?

{
  leaveType: "Emergency Leave"
  email: "sfe.bruce.logan@gmail.com"
  hexCode: ???
}
{
  leaveType: "Sick Leave"
  email: "sfe.bruce.logan@gmail.com"
  hexCode: ???
}

Ответы [ 3 ]

0 голосов
/ 30 октября 2019

Вы можете использовать Map и map

  • Отображать leaveTag на соответствующие hexCode
  • Цикл проверки данных, если leaveType существует в Map, если существует, использовать значение из Map, иначе оставить исходное значение

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 голосов
/ 30 октября 2019

Мой подход с использованием только карты массивов

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 голосов
/ 30 октября 2019

Вы можете просто выполнить поиск, как показано ниже, но сложность по времени в этом случае выше (хотя более высокая читаемость и не сложность пространства)

Или вы можете создать карту типа leaveType : hexCode из первых данныхмассив, а затем использовать карту, чтобы найти соответствующее значение и заполнить второй массив. Проверьте ответ @ CodeManiac для этого подхода.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...