Javascript 按对象值的嵌套数组筛选对象数组

Javascript 按对象值的嵌套数组筛选对象数组,javascript,arrays,multidimensional-array,ecmascript-6,filter,Javascript,Arrays,Multidimensional Array,Ecmascript 6,Filter,假设我有一个对象数组,每个对象都包含一个嵌套的对象数组likes: [ { id: 1, title: 'Lorem', private: false, likes: [ { id: 01, username: 'mike' }, { id: 02, username: 'john' } ] }, { id: 2, title: 'Ipsum', private: true, likes:

假设我有一个对象数组,每个对象都包含一个嵌套的对象数组
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嵌套数组中的username值筛选外部数组?假设输出包含在其内部数组对象中的项,其属性为
username:'mike'

您可以通过查看嵌套数组进行筛选

var data=[{id:1,标题:'Lorem',private:false,喜欢:[{id:01,用户名:'mike'},{id:02,用户名:'john'}]},{id:2,标题:'Ipsum',private:true,喜欢:[{id:03,用户名:'steve'},{id:04,用户名:'mike'},{id:05,用户名:'sara'},{id:3,标题:'Dolor private:false,喜欢:[id:06,用户名:'brad'},{id:07,用户名:'cameron'},{id:08,用户名:'liam'}]},
result=data.filter(({likes})=>likes.some({username}=>username==mike');
控制台日志(结果)

。作为控制台包装{max height:100%!重要;top:0;}
使用过滤器和一些函数:

const输入=[{
id:1,
标题:“洛伦”,
二等兵:错,
喜欢:[{
id:1,
用户名:“迈克”
}, {
id:2,
用户名:“john”
}]
},
{
id:2,
标题:“Ipsum”,
二等兵:是的,
喜欢:[{
id:3,
用户名:“史蒂夫”
},
{
id:4,
用户名:“迈克”
},
{
id:5,
用户名:“sara”
}
]
},
{
id:3,
标题:“多洛”,
二等兵:错,
喜欢:[{
id:6,
用户名:“brad”
},
{
id:7,
用户名:“cameron”
},
{
id:8,
用户名:“liam”
}
]
}
];
常量标准={
用户名:“迈克”
};
const result=input.filter(x=>
x、 likes.some(y=>y.username===criteria.username)
);

控制台日志(结果)您可以使用“映射”功能过滤内部数组

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)

在likes中使用
过滤器
查找

const filter=(数据、名称)=>
data.filter(({likes})=>likes.find({username}=>username==name));
常数数据=[
{
id:1,
标题:“洛伦”,
二等兵:错,
喜欢:[
{id:01,用户名:“mike”},
{id:02,用户名:“john”},
],
},
{
id:2,
标题:“Ipsum”,
二等兵:是的,
喜欢:[
{id:03,用户名:“steve”},
{id:04,用户名:“mike”},
{id:05,用户名:“sara”},
],
},
{
id:3,
标题:“多洛”,
二等兵:错,
喜欢:[
{id:06,用户名:“brad”},
{id:07,用户名:“cameron”},
{id:08,用户名:“liam”},
],
},
];
日志(过滤器(数据,“mike”);
日志(过滤器(数据,“废话”)