繁体   English   中英

通过在嵌套的对象数组中查找多个条件来过滤数组

[英]Filter array by finding multiple conditions in nested array of objects

我有一个包含对象嵌套数组的数组,我想过滤嵌套 arrays 的 object 满足多个条件的数据。

这是示例数据。

const providerList = [
  {
    id: "bac4ef8d",
    provider_name: 'Paa Ra'
    provider_gender: "Male",
    provider_item: [
      {
        itemID: "5911319b"
        is_approved: true,
        is_active: true,
      },
      {
        itemID: "937a56d7"
        is_approved: true,
        is_active: true,
      },
    ],
  },
  {
    id: "9df373d5",
    provider_name: "Che Ta",
    provider_gender: "Female",
    provider_item: [
      {
        itemID: "5911319b"
        is_approved: true,
        is_active: true,
      }
    ],
  }
]

这些是过滤器,注意 itemID 可以有任意数量的元素。

const itemFilter = {
  itemID: ["5911319b", "937a56d7"],
  is_approved: [true],
  is_active: [true],
};

这是我的代码,但是 output 没有按预期返回。

const filterProviders = providerList.filter(provider =>
  provider.provider_item.every(item =>
    Object.entries(itemFilter).every(([k, v]) => v.includes(item[k]))),
);

我需要过滤providerList并返回provier_itemitemFilter中的所有值匹配的提供者

这是你所追求的:

 const providerList = [{ id: "bac4ef8d", provider_name: 'Paa Ra', provider_gender: "Male", provider_item: [{ itemID: "5911319b", is_approved: true, is_active: true, }, { itemID: "937a56d7", is_approved: true, is_active: true, }, ], }, { id: "9df373d5", provider_name: "Che Ta", provider_gender: "Female", provider_item: [{ itemID: "5911319b", is_approved: true, is_active: true, }], } ] const itemFilter = { itemID: ["937a56d7"], is_approved: [true], is_active: [true], } const filterProviders = providerList.reduce((acc, provider) => { provider.provider_item = provider.provider_item.filter(item => ( itemFilter.itemID.includes(item.itemID) && itemFilter.is_approved.includes(item.is_approved) && itemFilter.is_active.includes(item.is_active) )) if (provider.provider_item.length > 0) { acc.push(provider) } return acc }, []) console.log(filterProviders)

暂无
暂无

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

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