Javascript AngularJS:如何过滤除一个属性之外的对象数组

Javascript AngularJS:如何过滤除一个属性之外的对象数组,javascript,angularjs,angularjs-filter,Javascript,Angularjs,Angularjs Filter,Angular$filter可以对对象数组进行字符串模糊搜索 但是我的每个对象都有一个base64 pic属性 var MyObjects = [{ property1: 'ab', property2: 'cd', pic: '4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBw.....' }, { property1: 'ef', property2: 'gh', pi

Angular$filter可以对对象数组进行字符串模糊搜索

但是我的每个对象都有一个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属性?

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

您可以使用此功能实现您想要的功能

因此,您可以这样做,只将搜索文本与您想要的两个属性进行比较:

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);

这就是我最终实现它的方式。角度自定义过滤器似乎是解决此类问题的方法,但是在这个实现中,您可以通过添加另一个
&&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;
};