Home > Software design >  How to filter an array of object inside an array of objects based on an array and also remove proper
How to filter an array of object inside an array of objects based on an array and also remove proper

Time:01-28

let array1= [
    { "id": 100, name: "A", "details": [{"year": "2012"},{"data": "Test1"}]},
    { "id": 101, name: "B", "details": [{"year": "2013"},{"data": "Test2"}]},
    { "id": 102, name: "C", "details": [{"year": "2014"},{"data": "Test3"}]}
];

const array2= ['2012'];

Result I wanted

{ "id": 100, name: "A", "details": [{"year": "2012"}]}

I know i can filter the array with this code

array1.filter(o => 
  o.details.some(p=> {
    return array2.includes(p.year)
  })
)

But is there a way to remove the objects as well.

CodePudding user response:

We can reduce to avoid multiple steps

This reduce filters and deletes part of the details array

let array1 = [
    { "id": 100, name: "A", "details": [{"year": "2012"},{"data": "Test1"}]},
    { "id": 101, name: "B", "details": [{"year": "2013"},{"data": "Test2"}]},
    { "id": 102, name: "C", "details": [{"year": "2014"},{"data": "Test3"}]}
];

const array2 = ['2012'];

let array3 = array1.reduce((acc, {id,name,details}) => {
  if (array2.includes(details[0].year)) {
    acc.push({ id, name, details: details[0] })
  }
  return acc
}, [])

console.log(array3)

  •  Tags:  
  • Related