【发布时间】:2018-01-11 12:48:16
【问题描述】:
我知道这是微不足道的,但我有一个疑问需要澄清。
我有一个集合vm.groups,几乎有1000 objects。现在,每个对象都有name, id, links etc. property fields。
网格仅显示name and id。
现在,有一个文本框,我们可以在其中输入一些文本,我们必须根据输入的内容过滤数据,但过滤只能在对象的名称和 id 字段中进行,而不是在存在的其他字段中进行在对象内。
所以,这两件事都可以做到,
1) 我从原始集合对象创建了一个临时集合,其中只有 name 和 id 字段,然后将该集合绑定到视图。
// vm.groups.forEach(function(element) {
// vm.displayedFieldGroups.
// push({name: element.name,id: element.id,transformedId: element.transformedId});
// });
2) 或者,我创建了一个自定义过滤器vm.customSearch:
vm.customSearch = function(searchVal) {
if(vm.filter.length) {
if(vm.filter.toLowerCase().indexOf(searchVal.name.toLowerCase) !== -1 ||
vm.filter.toLowerCase().indexOf(searchVal.name.toLowerCase) !== -1) {
console.log(searchVal);
return true;
}else {
return false;
}
} else {
console.log(searchVal);
return true;
}
};
在视图中vm.groups | filter: vm.customSearch。
但我认为second method is slower because each value in the collection would be passed to the filter which is obviously tedious for huge collection。
我说的对吗? 哪种方法是正确的?
更新
这是针对旧版应用程序的。已经实现了一个过滤器,但它只遍历对象中的所有字段。我只需要过滤对象的名称和 ID 字段。
因此,I need to either create a custom filter or choose the first approach that I depicted.
【问题讨论】:
-
如果您打算对 (1) 使用过滤器,那么为什么过度复杂化逻辑并创建一个临时集合是有意义的呢?您想如何过滤 (1) 方法中的项目?
-
@ Stanislav Kvitash 这是一个遗留应用程序。已经实现了一个过滤器,但它只遍历对象中的所有字段。我只需要过滤对象的名称和 ID 字段。
标签: javascript angularjs filter