繁体   English   中英

基于另一个数组过滤数组

[英]Filtering array based on another array

我正在尝试过滤 arr1,关于 arr2 我想要实现的是,获取 arr1 的所有对象,其中它在 arr2 中对应的“流派”属性为“真”

const arr1=[
  {
    "id":1,"genre":["horror","drama","mystery"]
  },
   {
    "id":2,"genre":["romance"]
  },
   {
    "id":3,"genre":["adventure","drama"]
  },
]

const arr2=[
  {
    "genre":"horror",
    "checked":false
  },
  {
    "genre":"drama",
    "checked":true
  },
  {
    "genre":"mystery",
    "checked":false
  },
  {
    "genre":"romance",
    "checked":false
  },
  {
    "genre":"adventure",
    "checked":true
  }
]

所以所需的输出将是:

[
 {
   "id":1,"genre":["horror","drama","mystery"]
  },
{
    "id":3,"genre":["adventure","drama"]
  },
]

我已经尝试了一些配置 javascript 过滤器方法,但我只是想不出像描述的那样工作的东西。 任何帮助,将不胜感激。 谢谢你。

这应该工作。

在第一个数组上使用.filter并在另一个数组上使用.some来确定它是否被checked并且第一个数组的元素包含使用.indexOf或更好.includes的目标genre

 const arr1=[ { "id":1,"genre":["horror","drama","mystery"] }, { "id":2,"genre":["romance"] }, { "id":3,"genre":["adventure","drama"] }, ] const arr2=[ { "genre":"horror", "checked":false }, { "genre":"drama", "checked":true }, { "genre":"mystery", "checked":false }, { "genre":"romance", "checked":false }, { "genre":"adventure", "checked":true } ] const result = arr1.filter(a1 => arr2.some(a2 => a2.checked && a1.genre.includes(a2.genre))) console.log(result)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM