Как сопоставить объект ответа с массивом объектов в JavaScript?

#javascript #arrays #reduce

Вопрос:

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

Есть ли какой-нибудь способ сделать значение равным нулю, если ключи не совпадают?

Я попытался следовать:

 const data = {
  test1: 1,
  test2: 2
};

const val = [
  {
    id: 'test1',
    val: 2222
  },
  {
    id: 'test2',
    val: 5555
  },
  {
    id: 'test3',
    val: 4444
  }
];

val.forEach(element => {
  Object.entries(data).forEach(([key, value]) => {
    if (element.id === key) {
      element.val = value;
    }
  });
});

console.log(val);
// output:
// const val = [
//   {
//     id: 'test1',
//     val: 1
//   },
//   {
//     id: 'test2',
//     val: 2
//   },
//   {
//     id: 'test3',
//     val: ""
//   }
// ]; 

Ответ №1:

Вам не нужна петля. Просто проверьте, существует ли это свойство.

 const data = {
  test1: 1,
  test2: 2
};

const val = [{
    id: 'test1',
    val: 2222
  },
  {
    id: 'test2',
    val: 5555
  },
  {
    id: 'test3',
    val: 4444
  }
];

val.forEach(element => {
  if (data.hasOwnProperty(element.id)) {
    element.val = data[element.id];
  } else {
    element.val = "";
  }
});

console.log(val);