使用es6构建mutli维数组过滤器

时间:2018-06-10 09:00:53

标签: javascript arrays reactjs filter ecmascript-6

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

enter image description here

我得到的产品数据和过滤器必须互相添加。 要通过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);
        });
    });
}
  • Argument arr是Product array
  • 参数过滤器是过滤器处于活动状态的信息。 例如:

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

只要在产品的某个级别按品牌ID或类别ID进行过滤,就可以使用此功能。

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

感谢

1 个答案:

答案 0 :(得分:0)

答案是:

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));