繁体   English   中英

过滤JS中另一个数组内的对象数组

[英]Filter array of objects inside another array in JS

的JavaScript。 具有这样的结构,即对象数组,每个对象内部都有items数组

[
  {
    "title": "Venom",
    "items": [
      {
        "title": "Venom title",
        "active": true
      },
      {
        "title": "Venom2",
        "active": false
      }
    ]
  },
  {
    "title": "Video",
    "items": []
  },
  {
    "title": "Button",
    "items": [
      {
        "title": "Button page",
        "active": true
      }
    ]
  }
]

我想排除每个元素内具有active: false属性的items ,因此排除元素Venom2

{
   "title": "Venom2",
   "action": "venom2",
   "content": "qwertrete5t5t4t5",
   "active": false
}

从存在数组。

我用forEach制作并在另一个里面累积数组,这是

let menu = [];

v.forEach((section) => {
     menu.push({
         title: section.title,
         items: section.items.filter(item => item.active)
     })
});

然后,我尝试使用双滤镜使其更漂亮,但它不起作用,返回[] ,我基本上猜出了原因...

let menu = v.filter((section) => {
    return (section.items.filter(item => item.active === true));
});

也许我的案子有更漂亮的决定(也许带有减少)?

您的forEach应该工作正常。 我唯一能看到的改进就是使用mapdestructuring 这样,您可以将其直接分配给menu如下所示:

 const v = [{title:"Venom",items:[{title:"Venom title",active:true},{title:"Venom2",active:false}]},{title:"Video",items:[]},{title:"Button",items:[{title:"Button page",active:true}]}]; let menu = v.map(({title, items}) => ({title, items: items.filter(i => i.active)})) console.log(menu) 

暂无
暂无

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

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