I have an array, which looks like this:
const persons = [
{
name: \"Joe\",
animals: [
{species: \"dog\", name: \"Bolt\"},
{species: \"c
Your inner filter still returns a "truthy" value (empty array) for the dog person. Add .length
so that no results becomes 0
("falsey")
const result = persons.filter(p => p.animals.filter(s => s.species === 'cat').length)
Edit: Per comments and several other answers, since the goal is to get a truthy value from the inner loop, .some
would get the job done even better because it directly returns true if any items match.
const result = persons.filter(p => p.animals.some(s => s.species === 'cat'))
You havent checked against the length of the second filter.
Filer only includes results that return a true
value. So we need to provide the second filter with a way of returning true if it finds something. We can do that by saying, if the returned array is > 0
const persons = [
{
name: "Joe",
animals: [
{species: "dog", name: "Bolt"},
{species: "cat", name: "Billy"},
]
},
{
name: "Bob",
animals: [
{species: "dog", name: "Snoopy"}
]
}
];
const filtered = persons.filter(p => p.animals.filter(a => a.species === "cat").length > 0)
console.log(filtered)
You might want to use some'
persons.filter(p => p.animals.some(s => s.species === 'cat'))
This should work!
const result = persons.filter(person => {
let innerResult = person.animals.filter(animal => {
return animal.species === 'cat';
});
return innerResult.length > 0;
});
You can use filter()
with some()
method to check if some of the objects in animals array has species == cat
.
const persons = [{"name":"Joe","animals":[{"species":"dog","name":"Bolt"},{"species":"cat","name":"Billy"}]},{"name":"Bob","animals":[{"species":"dog","name":"Snoopy"}]}]
const result = persons.filter(({animals}) => {
return animals.some(({species}) => species == 'cat')
})
console.log(result)
const persons = [
{
name: "Joe",
animals: [
{species: "dog", name: "Bolt"},
{species: "cat", name: "Billy"},
]
},
{
name: "Bob",
animals: [
{species: "dog", name: "Snoopy"}
]
}
];
Filter = function(arr, a){
return arr.filter(t=>t.animals.filter(y=>y.species==a).length>0);
}
console.log(Filter(persons, 'cat'))