1

I have two arrays, my aim is to filter the second array arr2 by the first array arr1, and get only matched values where prid is the same as arr2 id, results should be let filtred = [ {name:'kiwi', color:'red', id:12123},{name:'kiwi', color:'red', id:12123}], how i can ichieve this using 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}
]

2 Answers 2

3

Please note: According to your requirement your expected output is not correct:

You can try using Array.prototype.some() inside Array.prototype.filter() by matching the respective property value (prid of arr1 with 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);

Sign up to request clarification or add additional context in comments.

Comments

1

You can use Array.prototype.reduce which allows to create another array with different structure

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.