AngularJS:如何过滤对象阵列除了一个属性

时间:2014-05-30 15:31:39

标签: javascript angularjs angularjs-filter

Angular $ filter可以对Object Array进行字符串模糊搜索,

但是我的每个对象都有一个base64 pic的属性。

var MyObjects = [{
    property1: 'ab',
    property2: 'cd',
    pic: '4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBw.....' 
}, {
    property1: 'ef',
    property2: 'gh',
    pic: '4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBw.....' 
}, {
    ....


}],

result = $filter('filter')(MyObjects, $scope.searchText);

我怎样才能在模糊搜索中除了pic属性?

2 个答案:

答案 0 :(得分:1)

Angular的过滤器可以使用函数作为过滤数组的参数。过滤器将选择函数返回true的项目。

您可以使用此功能来实现您的目标。

Here is the official documentation

因此,您可以执行以下操作,仅将搜索文本与您想要的两个属性进行比较:

var filterFunction = function(item) {
    var val = $scope.searchText
    return item.property1.indexOf(val || '') !== -1 || item.property2.indexOf(val || '') !== -1;
}

result = $filter('filter')(MyObjects, filterFunction, $scope.searchText);

Here's a fiddle demonstrating this effect.

答案 1 :(得分:1)

这是我最终实现它的方式。 Angular自定义过滤器似乎是解决此类问题的方法。 You can find more about them from Angular,但在此实施中,您可以添加另一个&& key != "unwantedKey"来添加您想要留下的任何其他字段。键的值必须是indexOf工作的字符串,因此typeof部分确保我们不会获得任何数字等ID。

$scope.search = function(item){ 
    for (var key in item){
        if (typeof key === "string" && key != "pic"){ 

            if(item[key].indexOf($scope.query) > -1){
                return true;
            }
        }
    }
    return false;
};