首页 > 解决方案 > JavaScript 数组过滤和映射问题。如何进行嵌套过滤?

问题描述

假设,我有一个数组。

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},
          ],
       },
     ];

标签: javascriptarrayssortingmappingfiltering

解决方案


您可以map通过arr每个元素过滤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)


推荐阅读