Suppose I have an array of objects, each of which contains a nested array of objects likes
:
[
{
id: 1,
title: 'Lorem',
private: false,
likes: [
{ id: 01, username: 'mike' },
{ id: 02, username: 'john' }
]
},
{
id: 2,
title: 'Ipsum',
private: true,
likes: [
{ id: 03, username: 'steve' },
{ id: 04, username: 'mike' },
{ id: 05, username: 'sara' }
]
},
{
id: 3,
title: 'Dolor',
private: false,
likes: [
{ id: 06, username: 'brad' },
{ id: 07, username: 'cameron' },
{ id: 08, username: 'liam' }
]
}
]
How can I filter the outer array by the username value inside its items nested array? Let's say output the items that contains in its inner arrays objects with property username: 'mike'
?
You could filter by looking into the nested array.
var data = [{ id: 1, title: 'Lorem', private: false, likes: [{ id: 01, username: 'mike' }, { id: 02, username: 'john' }] }, { id: 2, title: 'Ipsum', private: true, likes: [{ id: 03, username: 'steve' }, { id: 04, username: 'mike' }, { id: 05, username: 'sara' }] }, { id: 3, title: 'Dolor', private: false, likes: [{ id: 06, username: 'brad' }, { id: 07, username: 'cameron' }, { id: 08, username: 'liam' }] }], result = data.filter(({ likes }) => likes.some(({ username }) => username === 'mike')); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
Use filter and some functions:
const input = [{ id: 1, title: "Lorem", private: false, likes: [{ id: 1, username: "mike" }, { id: 2, username: "john" }] }, { id: 2, title: "Ipsum", private: true, likes: [{ id: 3, username: "steve" }, { id: 4, username: "mike" }, { id: 5, username: "sara" } ] }, { id: 3, title: "Dolor", private: false, likes: [{ id: 6, username: "brad" }, { id: 7, username: "cameron" }, { id: 8, username: "liam" } ] } ]; const criteria = { username: "mike" }; const result = input.filter(x => x.likes.some(y => y.username === criteria.username) ); console.log(result);
you can use 'map' function to filter the internal array
const data = [
{
id: 1,
title: 'Lorem',
private: false,
likes: [
{ id: 1, username: 'mike' },
{ id: 2, username: 'john' }
]
},
{
id: 2,
title: 'Ipsum',
private: true,
likes: [
{ id: 3, username: 'steve' },
{ id: 4, username: 'mike' },
{ id: 5, username: 'sara' }
]
},
{
id: 3,
title: 'Dolor',
private: false,
likes: [
{ id: 6, username: 'brad' },
{ id: 7, username: 'cameron' },
{ id: 8, username: 'liam' }
]
}
]
const res = data.map( item => {
let likes = item.likes.filter( user => user.username === 'mike')
if(likes.length > 0 ) {
item.likes = likes
return item
}
return null
}).filter(item => item !== null )
console.log(res)
use filter
and find
in likes.
const filter = (data, name) => data.filter(({ likes }) => likes.find(({ username }) => username === name)); const data = [ { id: 1, title: "Lorem", private: false, likes: [ { id: 01, username: "mike" }, { id: 02, username: "john" }, ], }, { id: 2, title: "Ipsum", private: true, likes: [ { id: 03, username: "steve" }, { id: 04, username: "mike" }, { id: 05, username: "sara" }, ], }, { id: 3, title: "Dolor", private: false, likes: [ { id: 06, username: "brad" }, { id: 07, username: "cameron" }, { id: 08, username: "liam" }, ], }, ]; console.log(filter(data, "mike")); console.log(filter(data, "blah"));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.