JS(ES6):基于嵌套数组属性的过滤器数组

Nib*_*bor 7 javascript arrays filter ecmascript-6

我有一个数组,看起来像这样:

const persons = [
  {
    name: "Joe",
    animals: [
      {species: "dog", name: "Bolt"},
      {species: "cat", name: "Billy"},
    ]
  },
  {
    name: "Bob",
    animals: [
      {species: "dog", name: "Snoopy"}
    ]
  }
];
Run Code Online (Sandbox Code Playgroud)

现在我想根据物种进行过滤.例如:每个有猫的人都应该退回:

const result = [
  {
    name: "Joe",
    animals: [
      {species: "dog", name: "Bolt"},
      {species: "cat", name: "Billy"},
    ]
  }
];
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的filter()方法:

const result = persons.filter(p => p.animals.filter(s => s.species === 'cat'))
Run Code Online (Sandbox Code Playgroud)

但这不会返回所需的结果(它会返回两个人).

如何在嵌套数组的属性上过滤数组?

ver*_*tti 11

您的内部过滤器仍然为狗人返回"truthy"值(空数组).添加,.length以便没有结果0("假")

const result = persons.filter(p => p.animals.filter(s => s.species === 'cat').length)

编辑:每评论和其他几个答案,因为我们的目标是获得从内环路truthy值,.some会得到更好的完成工作,因为它直接有任何项目的比赛返回true.

const result = persons.filter(p => p.animals.some(s => s.species === 'cat'))