I'm trying to filter some data but I am trying to get all the elements with the same id
that have the number 3
.
The id 10
and 300
has number 3
so I want to get all the elements with id 10
and 300
Is it possible to do this using filters? My current code is filtering too much elements
const data = [{
id: 10,
number: 3
}, {
id: 10,
number: 2
}, {
id: 300,
number: 1
}, {
id: 300,
number: 3
}, {
id: 40,
number: 1
},
{
id: 40,
number: 2
}
]
const filteredData = data.filter(elem => elem.number === 3);
console.log(filteredData);
Expected Result:
{
id: 10,
number: 3
}, {
id: 10,
number: 2
}, {
id: 300,
number: 1
}, {
id: 300,
number: 3
}
CodePudding user response:
First create a Set
which contains all the id
you want. Then filter the list again based on the id
.
const data = [{
id: 10,
number: 3
}, {
id: 10,
number: 2
}, {
id: 300,
number: 1
}, {
id: 300,
number: 3
}, {
id: 40,
number: 1
},
{
id: 40,
number: 2
}
]
const ids = new Set(data.filter(d => d.number === 3).map(d => d.id));
const filteredData = data.filter(d => ids.has(d.id));
console.log(filteredData);
CodePudding user response:
Using some()
can also do it
data.filter(d => data.filter(d => d.number == 3).map(d => d.id).some(i => i == d.id))
const data = [{
id: 10,
number: 3
}, {
id: 10,
number: 2
}, {
id: 300,
number: 1
}, {
id: 300,
number: 3
}, {
id: 40,
number: 1
},
{
id: 40,
number: 2
}
]
let result = data.filter(d => data.filter(d => d.number == 3).map(d => d.id).some(i => i == d.id))
console.log(result)