#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);