微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何制作可用于多级对象数组的过滤器管道

如何解决如何制作可用于多级对象数组的过滤器管道

我正在寻找解决方案来改进可以搜索多个级别的管道。

我当前的管道没有通过所有级别,导致搜索结果不正确。

示例:

当我输入 ab 时,我没有得到所有与 ab 匹配的结果。

它只搜索非嵌套元素。

下面是我的stackblitz。

https://stackblitz.com/edit/angular-929hve

解决方法

你能替换你的代码块吗

return filterKeys.some((keyName) => {
                            return new RegExp(filter[keyName],'gi').test(item[keyName]) || 
                            new RegExp(filter[keyName],'gi').test(item.data[keyName]) ||
                            filter[keyName] == "";
                        });

这样:

return (
                new RegExp(filter[keyName],"gi").test(item[keyName]) ||
                new RegExp(filter[keyName],"gi").test(item.data[keyName]) ||
                new RegExp(filter[keyName],"gi").test(item.data.data) ||
                filter[keyName] == ""
              );

如果您注意到,我在此处添加了另一行,这将根据您的数据结构修复嵌套。

此外,为了使搜索适用于所有字段,在遍历键时您的代码中存在一个小错误。用以下代码替换 else 块的内容:

let keys = [];
        return items.filter(item => {
          keys = Object.keys(item);
          keys.push(...Object.keys(item.data));
          return keys.some(keyName => {
            console.log(keyName);
            return (
              new RegExp(filter,"gi").test(item[keyName]) ||
              new RegExp(filter,"gi").test(item.data[keyName]) ||
              new RegExp(filter,"gi").test(item.data.data) ||
              filter[keyName] == ""
            );
          });
        });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。