使用 Angular 5 过滤包含嵌套对象的数组

6

我尝试使用以下结构筛选具有许多对象的列表:

{  
"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个回答

3
你可以通过以下方式更改筛选条件来按用户的姓氏进行过滤。这将返回具有与给定姓氏匹配的一个父对象。
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);

1
我猜你的意思是返回 (item.users.some(i => i.surname.toLowerCase().indexOf(value.toLowerCase()) > -1))。此代码将返回对象中所有与给定姓氏匹配的用户,但我只需要该姓氏的用户。不确定筛选器是否正确或者是否需要另一种方法来解决这个问题。 - Ayane
1
是的,这是我的错。刚刚更新了答案。现在在下一个代码片段中,它将返回具有匹配姓氏的用户列表。 - Karan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接