Javascript 列表的自定义筛选器
我正在尝试制作一个过滤器,以仅显示列表中与用户输入匹配的元素Javascript 列表的自定义筛选器,javascript,regex,angularjs,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.toL
.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;
};
})
在这方面:
<li ng-repeat="curso in ctrl.list| removeAcentos: ctrl.input ">
... <!-- display items from ctrl.list that match ctrl.input -->
</li>
...
然而,我不明白为什么它不起作用。我测试了regex,filter函数返回正确值的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());
});
};
})
美好的但是我正在使用另一个过滤函数,我希望尽可能减少cpu消耗。考虑到cpu消耗,每个过滤器都值得使用吗?无论哪种方法都会创建一个循环,您的forEach并没有做任何事情来创建要返回的数组