当前位置: 首页 > 面试题库 >

如何编写angularjs过滤器以搜索字符串片段/字符串序列

端木志诚
2023-03-14
问题内容

我正在尝试编写一个angularjs自定义过滤器,以检查国家/地区数组是否包含用户输入的搜索字符串。

该字符串可以包含一个字母(例如“ E”)或n个字母的片段(例如“ lan”)或整个单词(例如“ England”)。

在每种情况下,都应返回包含该字母或该片段的所有国家,因此“ E”将返回“ England”,“爱沙尼亚”等,而“ lan”将返回“ England”,“
Ireland”等。

到目前为止,我的过滤器返回了整个国家或单个字母,但是我遇到了字符串片段的问题:

  1. HTML模板:
        <input ng-model="filter.text" type="search" placeholder="Filter..."/>

    <ul>
       <li ng-repeat="item in data | listfilter:filter.text">
    </ul>
  1. angularJS
        angular.module('sgComponents').filter('listfilter',[ function () {
    return function(items, searchText) {
        var filtered = [];            

        angular.forEach(items, function(item) {
            if(item.label === searchText) { // matches whole word, e.g. 'England'
                filtered.push(item);
            }
            var letters = item.label.split('');
            _.each(letters, function(letter) {
                if (letter === searchText) { // matches single letter, e.g. 'E'
                    console.log('pushing');
                    filtered.push(item);
                }
            });
            // code to match letter fragments, e.g. 'lan'
        });
        return filtered;
    };
    }]);

问题答案:

比这简单得多,使用以下String.indexOf()函数

angular.forEach(items, function(item) {
    if( item.label.indexOf(searchText) >= 0 ) filtered.push(item);
});

您可能需要将两个字符串都转换.toLowerCase()为不区分大小写的匹配项:

searchText = searchText.toLowerCase();
angular.forEach(items, function(item) {
    if( item.label.toLowerCase().indexOf(searchText) >= 0 ) filtered.push(item);
});


 类似资料:
  • 问题内容: 所有人都希望使用过滤的查询,其中结果应包含来自“ query_string”和来自“ term-filter”的数据。 预期结果是: 所有带有topic_id的字母“ a”或“”的博客记录均为10。 即使其描述为空白/空,也会记录topic_id为10的其余记录。 因此,最终结果应该是-具有较高分数的匹配记录,并且应该位于顶部,然后才是与过滤器中的“ topic_id”匹配的记录。 问

  • 问题内容: 我正在研究AngularJS教程,并了解的基础知识 但是,开箱即用的实现似乎仅限于将项目列表过滤为输入的确切单词或短语。 示例:如果查询是“ table cloth”,则结果列表可以包含带有短语“ Decorative table cloth”的结果,但由于过滤器只是一个连续的搜索字符串,因此将不包括“ Table fortable装饰布”。 我知道可以添加自定义过滤器,但乍一看似乎主

  • 问题内容: 在rails中,我使用gem进行搜索。我需要添加一个称为过滤器的字符串字段。如何添加到此插件? 我已经对此问题提出了一个问题Rails-如何在searchkick中添加更多字段以进行过滤 现在,我正在尝试使用字符串字段而不是布尔值,但搜索仍然无法正常工作。请同样帮助我。 我已经添加了一个条件,例如,根据此条件,我应该只获得活动用户(而不是“已删除”用户)。目前没有任何搜索数据在显示。

  • 问题内容: 我正在生成一个XML文件进行付款,并且我对用户的全名有一个限制。该参数仅接受字母字符(a-ZAZ)+空格来分隔名称和姓氏。 我无法通过简单的方式对此进行过滤,如何构建正则表达式或过滤器以获得所需的输出? 例: 一定是 我需要将元音转换成带有单个元音的装饰,如下所示:á> a,à> a,â> a,依此类推;等等。并删除特殊字符,如点,连字符等。 谢谢! 问题答案: 您可以先使用规范化器,

  • 必须是 我需要在单元音中变换带有装饰的元音,如下所示:á>a,à>a,â>a,以此类推;并删除点、连字符等特殊字符。 谢谢!

  • 我有一个巨大的文本文件,其中包含许多小写字符与大写字符混合的拼写错误,但仅包含字母“l”(小写L)并且仅包含大写单词,形式如下: 因此,我想仅替换大写单词中的所有字符“l”(小写字母l)(因为有许多小写单词通常也包含小写字母“l”),其中前一个字符是大写的,相邻字符也是大写的。类似[A-Z][l][A-Z],用大写字母“I”替换小写字母“l”(如MIKE),但保持大写单词的其余部分不变,并且不影响