Как фильтровать по определенному полю в массиве объектов с помощью фильтра $ filter ('filter')

Я хотел бы отфильтровать массив объектов сотрудника, используя фильтр $ filter ('filter'), чтобы фильтровать результаты на основе поля имени первого сотрудника, ТОЛЬКО, которое можно выбрать из раскрывающегося списка/выбора. Заметьте, что я НЕ хочу использовать "фильтр:" в ng-repeat ".

Трудность состоит в том, что поле имени является свойством другого поля, называемого "details", поэтому я не могу детализировать. Как код ниже, потому что он будет ошибочным.

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

См. Ниже структуру объекта массива сотрудников.

Как я могу сказать, что для фильтрации записей на основе поля details.name используется фильтр $ filter ('filter')?

Заранее спасибо за вашу помощь!

Вот код:

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>

 function filterEmployees() {
 $scope.filteredEmployees = $filter('filter')(employees, "Joe");
 };
1 ответ

Выражение может быть отображением свойств для фильтров: где каждое свойство объекта сопоставляется с соответствующим свойством в результирующем наборе.

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

Демо-версия

Использование пользовательской функции

Если ваши данные более сложны и вам нужна более совершенная фильтрация, вы можете просто передать пользовательскую функцию предиката для оценки того, следует ли фильтровать элемент.

Ввод функции принимает каждый элемент массива в качестве аргумента и, как ожидается, возвращает 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);
});

Демо-версия

licensed under cc by-sa 3.0 with attribution.