AngularJS中使用$filter筛选整数1、-1失效问题求助
问题原因与解决方案
这绝对不是AngularJS的bug,是咱们用内置filter过滤器的时候没注意到它的默认匹配规则导致的!
为什么会出现这个问题?
AngularJS的内置filter过滤器默认采用模糊字符串匹配:当你传入{state: 1}作为筛选条件时,它会把每个元素的state值转换成字符串,然后检查这个字符串是否包含"1"。state=-1转成字符串是"-1",里面刚好包含"1",所以就被误筛选出来了。
两种解决办法
方法一:开启严格匹配模式
在筛选参数的最后加上true,开启严格相等(===)匹配,这样只有state严格等于1的元素才会被选中:
angular.module('app', []).controller('ctrl', function ($scope, $filter) { $scope.data = [ { state: 0 }, { state: 1 }, { state: -1 }, { state: 10 } ]; // 开启严格匹配 var filteredData = $filter('filter')($scope.data, { state: 1 }, true); console.log(filteredData.length); // 输出1,正确筛选出state=1的元素 });
方法二:使用自定义筛选函数
如果需要更灵活的筛选逻辑,可以传入一个自定义函数,精确判断state是否等于1:
angular.module('app', []).controller('ctrl', function ($scope, $filter) { $scope.data = [ { state: 0 }, { state: 1 }, { state: -1 }, { state: 10 } ]; // 自定义筛选函数 var filteredData = $filter('filter')($scope.data, function(item) { return item.state === 1; }); console.log(filteredData.length); // 输出1,结果正确 });
这两种方法都能解决你的问题,推荐第一种(严格匹配),逻辑更简洁;如果后续有复杂的筛选规则,再用自定义函数就好~
内容的提问来源于stack exchange,提问作者wayneOS
相关产品推荐
相关产品推荐

