javascript - 过滤嵌套数组

标签 javascript

我正在尝试使用 ID 过滤我的事件对象。如果其中一个事件具有匹配的类别 ID,那么我想将其添加到新对象中。

我正在更新我原来的问题,因为 dots 属性是一个对象数组。所以下面的答案是行不通的

我有一个基本的fiddle

    const selectedId = 62;
    const filteredEvents = {};
    const events = {
  "2018-01-31": {
    dots: [{
      key: "test",
      color: "red",
      categories: [{
        name: "cat 1",
        id: 59
      }, {
        name: "cat 2",
        id: 61
      }, {
        name: "cat 3",
        id: 62
      }]
    }]
  },
  "2018-02-02": {
    dots: [{
      key: "test 1",
      color: "blue",
      categories: [{
        name: "cat 1",
        id: 59
      }]
    }]
  },
  "2018-02-04": {
    dots: [{
      key: "test 2",
      color: "pink",
      categories: [{
        name: "cat 1",
        id: 59
      }]
    }, {
      key: "test 2",
      color: "pink",
      categories: [{
        name: "cat 1",
        id: 59
      }]
    }]
  }
};

尝试在这里过滤:

Object.keys(events).dots.categories.filter(category => {
    category.id === selectedId // remove if matching
});

我只想在过滤对象中使用此属性,因为它的类别 ID 为 62:

const events = {
  "2018-01-31": {
    dots: [{
      key: "test",
      color: "red",
      categories: [{
        name: "cat 1",
        id: 59
      }, {
        name: "cat 2",
        id: 61
      }, {
        name: "cat 3",
        id: 62
      }]
    }]
  }

最佳答案

您可以使用Object.values()将对象转换为值数组,使用.find()获取具有id的对象 等于 selectedId

const results = Object.values(events).filter(({dots:{categories}}) => 
    categories.find(({id}) => id === selectedId)
).pop();

关于javascript - 过滤嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48241687/

相关文章:

javascript - 如何在灯箱图像上设置外部链接?

javascript - iPad 通过 CSS 禁用链接点击

javascript - 即使在研究了 JS 和 JQ 之后也无法弄清楚 parseInt

javascript - AngularJS无法读取未定义的属性 '$setPristine'

javascript - 有没有更好的方法从字符串中提取信息?

javascript - 隐藏空的 html 表格行

javascript - React slice() 使用 immer 进行突变转换

javascript - 如何使用复选框并仅使用该复选框切换 Accordion 菜单?

JavaScript Chrome 扩展 - 在从弹出窗口到内容创建新标签后发送消息

javascript - 如何确保 javascript/jquery 总是在返回 true(打开链接)之前完成点击功能?