猿问

在 JavaScript 中对对象数组内的对象数组进行过滤

我想按类别获取 Main 的数组


[

  {

    "@id": "/api/main/7648",

    "@type": "Main",

    category: [{

      name: "laboriosam"

    }]

  },

  {

    "@id": "/api/main/7647",

    "@type": "Main",

    category: [{

        name: "foo"

      },

      {

        name: "bar"

      }

    ]

  }

]

所以我尝试:


console.log([...this.state.mains].filter(main => main.category.filter(category => category.name == "foo")))

但它返回了我的一切,我不明白为什么?


BIG阳
浏览 108回答 2
2回答

慕少森

使用Array.prototype.some,您可以确定该值是否存在。使用Array.filter函数,它仅过滤true值,因此需要在回调时返回布尔值。const input = [{    "@id": "/api/main/7648",    "@type": "Main",    category: [{      name: "laboriosam"    }]  },  {    "@id": "/api/main/7647",    "@type": "Main",    category: [{        name: "foo"      },      {        name: "bar"      }    ]  }];console.log(input.filter(main => main.category.some(category => category.name == "foo")))

九州编程

我觉得你的问题真的很难理解。如果你只想要 @type = "Main" 的对象,你可以这样做this.state.mains.filter(x => x["@type"] === "Main");如果您想过滤掉那些没有特定类别的人,您可以添加另一个过滤器,如下所示:this.state.mains    .filter(x => x["@type"] === "Main")    .filter(x => x.category.findIndex(c => c.name === "foo") !== -1);显然,在大数组的情况下,您还可以将两项检查放入一个过滤器中,但这可能不那么可读。另请注意,这[...this.state.mains].filter(...)是多余的,因为.filter()已经返回了一个新数组。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答