Фильтр массива с вложенными объектами Angular 5 - PullRequest
0 голосов
/ 24 июня 2018

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

{  
"element1":{  
  "code":"12345",
  "location":"Location"
},
"users":[  
  {  
     "id":1,
     "name":"Name 1",
     "surname":"Surname 1",
  },
  {  
     "id":2,
     "name":"Name 2",
     "surname":"Surname 2",
  }
 ]
}

Сейчас я фильтрую его по первому элементу следующим образом:

filterList(value) {

    if (value&& value.trim() != '') {
        myList = myList .filter((item) => {
            return (item.element1.location.toLowerCase().indexOf(value.toLowerCase()) > -1);
        })
    }
}

Я пытался приспособить это, чтобы отфильтровать их по атрибуту пользователей, который является списком объектов, а внутри него по фамилии, что мне нужно изменить?

1 Ответ

0 голосов
/ 24 июня 2018

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

return (item.users.some(i => i.surname.toLowerCase().indexOf(value.toLowerCase()) > -1));

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

var usersList = [];
myList.forEach(i => Array.prototype.push.apply(usersList, i.users));
usersList = usersList.filter(i => i.surname.toLowerCase().indexOf(value.toLowerCase()) > -1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...