【问题标题】:Using array values for nested filtering使用数组值进行嵌套过滤
【发布时间】:2021-06-28 10:40:31
【问题描述】:

我有一个嵌套数组对象

const product = [{
        ref_id: 'B123',
        items: [
          {
            name: 'Brush',
            ref_id: 'M1' 
          },
          {
            name: 'Paste',
            ref_id: 'M2' 
          }
        ]
      },
      {
        ref_id: 'B124',
        items: [
          {
            name: 'Apple',
            ref_id: 'M9' 
          },
          {
            name: 'Orange',
            ref_id: 'M3' 
          }
        ]
      },
      {
        ref_id: 'B113',
        items: [
          {
            name: 'Maggi',
            ref_id: 'M7' 
          },
          {
            name: 'Wai Wai',
            ref_id: 'M12' 
          }
        ]
      }
    ]

外部 ref_id 是类别 id,内部是产品 id。现在,我有两个数组 - 一个的值为类别的 ref_id,另一个为产品的 ref_id。

const filteredCategories = ['B123'];
const filteredItems = ['M2', 'M9', 'M7']

我想过滤掉所有属于filteredCategories ref_id 和filteredItems ref_id 的项目,这些项目可以是任何其他类别的一部分。此外,结果不应包含重复项。

我的解决方案

let filteredProducts = [];
      products.forEach(item => {
        if(_.includes(filteredCategories, item.ref_id)) {
          filteredProducts.push(...item.items);
        } else {
          const filterProductItems = _.filter(item.items, (productItem)=> _.includes(filteredItems, productItem.ref_id));
          if(filterProductItems) {
            filteredProducts.push(...filterProductItems);
          }
        }
      });

由于项目列表可能非常大,这是否可以以更好和优化的方式完成?

【问题讨论】:

标签: javascript lodash


【解决方案1】:
    @alia, I would suggest you use find method on product nested array object. Check for below code:

 useEffect(() => {
    getFilteredCategories()
  }, []);
    
      const filteredCategories = ['B123'];
      let filteredProducts = [];
      const getFilteredCategories = async () => {
        filteredCategories.map((id, index) => {
          const participants = product.find(o => o.ref_id === id);
          filteredProducts.push(participants)
          return filteredProducts;
        });
        console.log('filteredProducts', filteredProducts)
      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    相关资源
    最近更新 更多