我正在尝试过滤角度为5的数组对象,这是我的对象
{
"id_record": 2,
"groupName": "PD",
"count": 15,
"userList": [{
"name": "jeffhua",
"nEmail": "jeffhua@abc.com"
},
{
"name": "joey",
"nEmail": "joey@abc.com"
},
{
"name": "angelagosto",
"nEmail": "angelagosto@abc.com"
}
]
}
这是我的过滤器代码
return items.filter(it => {
return it.userList.filter(dit => {
return dit.name.toLowerCase().includes(filterText)
});
});
怎么了?
答案 0 :(得分:1)
在您的过滤器代码中,第二个过滤器返回一个数组:
return it.userList.filter(dit => {
return dit.name.toLowerCase().includes(filterText)
});
// returns array
,并且filter方法等待一个布尔值返回。尝试以下操作:
return items.filter(it => {
return it.userList.filter(dit => {
return dit.name.toLowerCase().includes(filterText);
}).length !== 0;
});
在我的代码段中,我检查内部过滤器结果(数组)是否为空。如果不是,则将true返回给父过滤器,该过滤器会将当前对象保留在结果数组中。
以下代码返回一个布尔值,检查用户之一的小写名称是否包含filterText。
return dit.name.toLowerCase().includes(filterText);
然后,此块返回一个数组,其中包含在前面说明的条件下返回true的所有值:
return it.userList.filter(dit => {
return dit.name.toLowerCase().includes(filterText);
})
但是,要使代码段的父级部分能够过滤数组,它需要一个布尔值作为返回值:
return items.filter(it => {
return // expect boolean
});
然后,.length !== 0
位于末尾:
it.userList.filter(dit => {
return dit.name.toLowerCase().includes(filterText);
})
将其设置为一个布尔值,应反映您想要的条件。
完整(并带有注释):
// filter returns an array filtered by the method
return items.filter(it => {
// awaits a boolean return value, with filter returning an array.
return it.userList.filter(dit => {
// filter awaits a boolean as return value AND returns a boolean --> ok for filter
return dit.name.toLowerCase().includes(filterText);
}).length !== 0; // filter has returned an array, we cast it to boolean while checking if its length is greater than 0.
});
答案 1 :(得分:1)
使用some
代替内部filter
return items.filter(it => {
return it.userList.some(dit => {
return dit.name.toLowerCase().includes(filterText)
});
});