簡體   English   中英

如何過濾另一個對象數組中的對象數組

[英]How to filter an array of objects inside another array of objects

我有一系列“合作伙伴”(如下所示),需要通過 label 過濾它們。

  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
    }

結果始終顯示兩個合作伙伴。 我也在這里搜索了類似的案例,但是在數組中沒有 object ,他們使用 indexOf() 或 includes(),在這種情況下我都無法做到。

如果有人可以提供幫助,我將不勝感激。

這樣做是這樣的:

    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 Label 1的解決方案,保持name等其他字段不變。 所有合作伙伴都將在 output 中,即使他們沒有任何solution對象。

我剛剛通過評論幫助解決了。 使用 .some() 而不是 .filter() 返回真/假值。

partnerFilter() {
  const setPartners = this.partners
    .filter(p => p.solution.some(item => item.label === 'Label 2'))
  return setPartners.filter(p => p.solution)
}
var data = {partners: [{
    name: 'Partner X',
    solution: [{
        label: 'Label 1',
      },
      {
        label: 'Label 2',
      }

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

console.log(data.partners.flatMap(i=>i.solution.filter(f=>f.label==="Label 2")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM