我正在尝试过滤一个角度为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)
});
});
会出什么问题呢?
发布于 2018-08-22 14:29:06
在过滤器代码中,第二个过滤器返回一个数组:
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.
});
发布于 2018-08-22 15:07:16
使用some
而不是内部filter
return items.filter(it => {
return it.userList.some(dit => {
return dit.name.toLowerCase().includes(filterText)
});
});
https://stackoverflow.com/questions/51969042
复制