JavaScript 数组过滤和映射问题。如何进行嵌套过滤?

JavaScript Array Filtering and Mapping Problem. How to do nesting filtering?

假设,我有一个数组。

const arr = [
      {
        category: 'Diner',
        item: [
          {name: 'Chicken Rice', price: 200},
          {name: 'Mutton Rice', price: 300},
        ],
      },
      {
        category: 'Breakfast',
        item: [
          {name: 'Tea Bisuit', price: 100},
          {name: 'Bread Butter', price: 300},
          {name: 'Green Tea', price: 80},
        ],
      },
    ];

如何根据项目名称过滤数组? 例如,如何过滤项目名称为 Green Tea?

的数组

输出必须是这样的:

arr = [
        {
          category: 'Breakfast',
          item: [
            {name: 'Green Tea', price: 80},
          ],
       },
     ];

您可以 maparr,对于每个元素,过滤 item 匹配术语

之后,filter再次arr拒绝item为空的元素

const arr = [ { category: "Diner", item: [ { name: "Chicken Rice", price: 200 }, { name: "Mutton Rice", price: 300 }, ], }, { category: "Breakfast", item: [ { name: "Tea Bisuit", price: 100 }, { name: "Bread Butter", price: 300 }, { name: "Green Tea", price: 80 }, ], }, ]

const term = "Green Tea"

const res = arr
  .map((categoryAndItems) => ({
    category: categoryAndItems.category,
    item: categoryAndItems.item.filter((item) => item.name === term),
  }))
  .filter((categoryAndItems) => categoryAndItems.item.length > 0)

console.log(res)