Как получить одно и то же значение из массива объектов с помощью JavaScript?

#javascript #arrays

Вопрос:

У меня есть два массива, моя цель-отфильтровать второй массив arr2 по первому массиву arr1 и получить только совпадающие значения , которые prid совпадают с arr2 идентификатором, результаты должны быть let filtred = [ {name:'kiwi', color:'red', id:12123},{name:'kiwi', color:'red', id:12123}] , как я могу это использовать filter ?

 let arr1 = [
  {prid:12123},
  {prid:12124}
]

let arr2 = [
  {name:'kiwi', color:'red', id:12123},
  {name:'kiwi2', color:'blue',id:12129},
  {name:'kiwi3', color:'green',id:12124}
] 

Ответ №1:

Пожалуйста, обратите внимание: в соответствии с вашими требованиями ваш ожидаемый результат неверен:

Вы можете попробовать использовать Array.prototype.some() inside Array.prototype.filter() , сопоставив соответствующее значение свойства ( prid of arr1 с id of arr2 ).

 let arr1 = [
  {prid:12123},
  {prid:12124}
]

let arr2 = [
  {name:'kiwi', color:'red', id:12123},
  {name:'kiwi2', color:'blue',id:12129},
  {name:'kiwi3', color:'green',id:12124}
]

let filtred = arr2.filter(i => arr1.some(j => j.prid == i.id))
console.log(filtred); 

Ответ №2:

Вы можете использовать Array.prototype.reduce, который позволяет создать другой массив с другой структурой

 let arr1 = [
  {prid:12123},
  {prid:12124}
]

let arr2 = [
  {name:'kiwi', color:'red', id:12123},
  {name:'kiwi2', color:'blue',id:12129},
  {name:'kiwi3', color:'green',id:12124}
]

let results = arr2.reduce((accumulator, currentItem) =>{
  let itemExists = arr1.findIndex(item => item.prid === currentItem.id);
  return itemExists !== -1? accumulator.concat(currentItem): accumulator;
}, []);

console.log(results);