首页 > 解决方案 > 如何过滤另一个对象数组中的对象数组

问题描述

我有一组“合作伙伴”(如下所示),需要按标签过滤它们。

  partners: 
  [
    {
      name: 'Partner X',
      solution: [
        {
          label: 'Label 1',
        },
        {
          label: 'Label 2',
        }

      ]
    },
    {
      name: 'Partner Y',
      solution: [
        {
          label: 'Label 1'
        }
      ]
    }
  ]

我的问题是我无法过滤“解决方案”数组。我最好的尝试是在另一个过滤器中使用一个过滤器,如下所示:

    partnerFilter() {
      const partnersClean = this.partners.filter(function(e) {
        return e.solution.filter(function(item) {
          return item.label === 'Label 2'
        })
      })
      return partnersClean
    }

结果始终显示两个合作伙伴。我也在这里搜索了类似的案例,但是数组中没有对象,他们使用了 indexOf() 或 includes(),在这种情况下我都无法做到。

如果有人可以提供帮助,我将不胜感激。

标签: javascriptarraysfilter

解决方案


这样做是这样的:

    partnerFilter() {
      const partnersClean = this.partners.map(function(e) {
        e.solution = e.solution.filter(function(item) {
          return item.label === 'Label 2'
        });
        return e;
      })
      return partnersClean
    }

这将删除输入中带有标签Label 1的解决方案,保持其他字段name不变。所有合作伙伴都将出现在输出中,即使solution他们没有任何对象。


推荐阅读