javascript - 在JS中过滤另一个数组中的对象数组

标签 javascript arrays object filter

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)

关于javascript - 在JS中过滤另一个数组中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54231120/

相关文章:

javascript - 创建对象的更简洁的方法

java - 创建对象的 Arraylist

javascript - 通过嵌套对象 JavaScript 计时递归迭代

javascript - CSS 图像加载时翻转

javascript - js flot 0.8.3 饼图不调整大小

java - 通用数组 - 无法编译

c - 如何在for循环中连接字符串?

Javascript:修改函数以动态创建表

javascript - 我必须使用脚本、html、css 更改类

java - 为什么binarysearch方法将负返回值减1