【问题标题】:Filter through Angular Collection fast快速过滤 Angular 集合
【发布时间】: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


【解决方案1】:

您的假设是正确的,即过滤器将遍历源数组中的每个项目并在每次有摘要循环时运行您的过滤器函数。

你应该继续第一种方法。

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多