如何使用$ filter('filter')按对象数组中的特定字段进行过滤

时间:2014-04-04 00:46:08

标签: angularjs angularjs-filter

我想使用$ filter('filter')过滤员工对象数组,根据员工的名字字段过滤结果,只能从下拉/选择中选择。请注意,我不想在ng-repeat“。

中使用”| filter:“

难点在于name字段是另一个名为'details'的字段的属性,所以我不能像下面的代码那样detail.name,因为它会出错。

$scope.filteredEmployees = $filter('filter')(employees, {details.name: selectedName }); 

请参阅下面的employee数组对象的结构。

如何告诉它使用$ filter('filter')根据details.name字段过滤记录?

提前感谢您的帮助!

以下是代码:

Var selectedName = “An”;
$scope.filteredEmployees = $filter('filter')(employees, {**details.name:** selectedName });
Var employees  = [
      {
        Date: 01/01/2012
        details: {
          name: ‘An’,
      age: 25

        }
      },
      {
        Date: 01/01/2012
        details: {
          name: ‘'Bill',
      age: 20

        }
            }];

    //Here is 
    <select ng-model="selectedName" ng-options="e for e in employees" data-ng-show="employees.length > 0" ng-change="filterEmployees">
        <option value="">All Employees</option>
    </select><br>

    function filterEmployees()  {
        $scope.filteredEmployees = $filter('filter')(employees, "Joe");
    };

1 个答案:

答案 0 :(得分:9)

表达式可以是map of property-to-filters:,其中对象中的每个属性都映射到结果集中的相应属性。

$filter('filter')(employees, {name:"Joe"});

Live Demo


使用自定义功能

如果您的数据更复杂,并且需要更高级的过滤,那么您只需传入自定义谓词函数来评估是否应过滤项目。

函数的输入将数组的每个项目作为参数,如果该项目应从结果集中排除,则应返回false

var people = [{date:new Date(), details:{
    name: 'Josh',
    age: 32
}}, {date:new Date(), details:{
    name: 'Jonny',
    age: 34
}}, {date:new Date(), details:{
    name: 'Blake',
    age: 28
}}, {date:new Date(), details:{
    name: 'David',
    age: 35
}}];

$scope.filteredPeople = $filter('filter')(people, function(person){
    return /^Jo.*/g.test(person.details.name);
});

Live Demo