[英]Filter array of objects by nested array of object value
假设我有一个对象数组,每个对象都包含一个嵌套的对象数组, 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' }
]
}
]
如何通过其 items 嵌套数组中的用户名值过滤外部数组? 假设 output 包含在其内部 arrays 对象中的项目,其属性为username: 'mike'
?
您可以通过查看嵌套数组进行过滤。
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; }
使用过滤器和一些功能:
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);
您可以使用 'map' function 过滤内部数组
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)
使用filter
并在喜欢中find
。
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"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.