javascript - 列表的自定义过滤器

标签 javascript regex angularjs

我正在尝试创建一个过滤器,以仅显示列表中与用户输入匹配的元素。

.filter('removeAcentos', function(){

    return function (source, item) {
    var re = new RegExp("" + item.toLowerCase() + "");
        angular.forEach(source, function(word){
            if(re.test(word.nomeCurso.toLowerCase()) === true){
                return true;
            }
        });
      //
        return false;
    };
})

在 View 上:

<li ng-repeat="curso in ctrl.list| removeAcentos: ctrl.input ">
    ... <!-- display items from ctrl.list that match ctrl.input -->
</li>

但是,我不明白为什么它不起作用。我测试了正则表达式,过滤器函数返回 true 以获得正确的值。有什么想法吗?

最佳答案

您的函数不返回数组。该函数唯一返回的是 false

forEach 确实也不是适合这项工作的工具。尝试使用 Array.prototype.filter() 并记住返回新数组:

.filter('removeAcentos', function(){

    return function (source, item) {
       if(!source){
          return false;
       }  
        var re = new RegExp("" + item.toLowerCase() + "");
       // return filtered array
       return source.filter( function(word){
            return re.test(word.nomeCurso.toLowerCase());
        });

    };
})

关于javascript - 列表的自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107441/

相关文章:

javascript - 如何将功能链接成一个句子

javascript - 将字符串转换为正则表达式时如何保留\

javascript - 在 Chrome 中打开多个窗口/选项卡

java - 如何匹配任意数量的大写字母?

JavaScript - 检查给定的子字符串是否被字母包围

javascript - AngularJS 相当于 Rails render/content_for?

javascript - AngularJs - 如何在将新数据添加到数据表后重新加载页面

javascript - 从 ng-repeat 中求和特定字段值的函数

javascript - AngularJs/.provider/如何获取rootScope进行广播?

javascript - 即使在 JavaScript 中使用有效的 return 语句,递归函数也会返回未定义