首页 > 解决方案 > 使用 es6 构建多维数组过滤器

问题描述

如屏幕截图所示,我试图构建一个过滤器逻辑,但由于其他原因无法在后端/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);
        });
    });
}

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

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

谢谢

标签: javascriptarraysreactjsfilterecmascript-6

解决方案


答案是:

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

推荐阅读