如何解决如何制作可用于多级对象数组的过滤器管道
我当前的管道没有通过所有级别,导致搜索结果不正确。
示例:
当我输入 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 举报,一经查实,本站将立刻删除。