问题描述
我当前的管道没有通过所有级别,导致搜索结果不正确。
示例:
当我输入 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] == ""
);
});
});