【问题标题】:Building mutli dimensional array filter with es6使用 es6 构建多维数组过滤器
【发布时间】:2023-03-29 13:07:01
【问题描述】:

如屏幕截图所示,我试图构建一个过滤器逻辑,但由于其他原因无法在后端/sql 中处理。

我正在获取产品数据,并且过滤器必须彼此相加。 为了实现按 1 个属性 id 过滤(例如按品牌 id 或类别 id 过滤),我构建了这样的功能:

multiFilter (arr, filters)  {

    const filterKeys = Object.keys(filters);

    return arr.filter(eachObj => {
        return filterKeys.every(eachKey => {

            if (!filters[eachKey].length) {
                return true;
            }
            return filters[eachKey].includes(eachObj[eachKey].id);
        });
    });
}
  • 参数 arr 是 Product 数组
  • 参数过滤器是哪些过滤器处于活动状态的信息。 比如:

         {
            "brands" : [4,6,8],
            "categorys" : [7,2,4,5],
            "additives" : [1,2,3,4,6,8,9,54,32,12]   
         }
    

只要在产品的一个级别上按品牌 ID 或类别 ID 过滤,此方法就可以工作。

我现在要做的是,例如通过添加剂过滤产品,正如您在我的屏幕截图中看到的那样,它们更深一层。 任何想法如何实现这一目标?

谢谢

【问题讨论】:

    标签: javascript arrays reactjs filter ecmascript-6


    【解决方案1】:

    答案是:

    multiFilter (arr, filters)  {
    
        const filterKeys = Object.keys(filters);
    
        return arr.filter(eachObj => {
            return filterKeys.every(eachKey => {
    
                if (!filters[eachKey].length) {
                    return true;
                }
    
                if(eachObj[eachKey].id) {
                    return filters[eachKey].includes(eachObj[eachKey].id );
                } else {
                    return filters[eachKey].some(f => eachObj[eachKey].some(v => v.id === f));
                }
            });
        });
    
    }
    

    ---->

           return filters[eachKey].some(f => eachObj[eachKey].some(v => v.id === f));
    

    【讨论】:

      猜你喜欢
      • 2018-07-07
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多