Javascript 类型脚本数组对象筛选器
我试图在angular 5中过滤一个数组对象,这是我的对象Javascript 类型脚本数组对象筛选器,javascript,arrays,multidimensional-array,filter,Javascript,Arrays,Multidimensional Array,Filter,我试图在angular 5中过滤一个数组对象,这是我的对象 { “id_记录”:2, “组名”:“PD”, “计数”:15, “用户列表”:[{ “姓名”:“杰弗华”, “nEmail”:jeffhua@abc.com" }, { “姓名”:“乔伊”, “nEmail”:joey@abc.com" }, { “名称”:“angelagosto”, “nEmail”:angelagosto@abc.com" } ] } 这是我的过滤代码 returnitems.filter(它=>{ 返回它.u
{
“id_记录”:2,
“组名”:“PD”,
“计数”:15,
“用户列表”:[{
“姓名”:“杰弗华”,
“nEmail”:jeffhua@abc.com"
},
{
“姓名”:“乔伊”,
“nEmail”:joey@abc.com"
},
{
“名称”:“angelagosto”,
“nEmail”:angelagosto@abc.com"
}
]
}
这是我的过滤代码
returnitems.filter(它=>{
返回它.userList.filter(dit=>{
返回dit.name.toLowerCase().includes(filterText)
});
});
可能有什么问题?在您的筛选器代码中,第二个筛选器返回一个数组:
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);
})
使它成为一个布尔值,应该反映您想要的条件
全文(和评论):
在过滤器代码中,第二个过滤器返回一个数组:
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);
})
使它成为一个布尔值,应该反映您想要的条件
全文(和评论):
使用
some
而不是内部filter
return items.filter(it => {
return it.userList.some(dit => {
return dit.name.toLowerCase().includes(filterText)
});
});
使用
some
而不是内部filter
return items.filter(it => {
return it.userList.some(dit => {
return dit.name.toLowerCase().includes(filterText)
});
});
什么是
项目
?对象还是数组?您的代码和结构不匹配。如果内部筛选器的条件始终返回false,则它仍将返回一个空数组,而该数组不是false数组。长度0
或!!0
为False它是一个自定义数组对象,是内部筛选器始终返回true,并且在筛选时现有数组中没有任何更改。什么是项
?对象还是数组?您的代码和结构不匹配。如果内部筛选器的条件始终返回false,则它仍将返回一个空数组,而该数组不是false数组。长度0
或!!0
为False它是一个自定义数组对象,是的内部筛选器始终返回true,并且在筛选时现有数组中没有任何更改。如果我添加“.length!==0”,它会抛出错误,表示“.length无法应用于布尔对象”因此,它证明了它返回的是布尔值,但如何才能获得下一级别的筛选器。根据MDN web文档:filter()方法创建一个新数组:。是否包含了.length!==0在正确的位置?在我的示例中,它是倒数第二个结尾}
(关闭返回它.userList.filter(dit=>{…})
感谢您的帮助,但它没有起作用。相反,我在对象中添加了一个标志,并将其设置为html将根据标志值显示。如果我添加“.length!==0”,它会抛出一个错误“.length不能应用于Boolean对象”因此它证明了它返回的是Boolean,但我可以通过什么方式获得下一级的过滤器。根据MDN web文档:filter()方法创建了一个新数组:。是否在正确的位置包含了.length!==0?在我的示例中,它是倒数第二个结尾)
(关闭返回它。userList。filter(dit=>{…})
感谢您的帮助,但它没有起作用。相反,我在对象中添加了一个标志,并将其设置为html将根据标志值显示。