Javascript 在嵌套对象数组中使用过滤器

Javascript 在嵌套对象数组中使用过滤器,javascript,arrays,filter,Javascript,Arrays,Filter,我有这个对象数组,我试图检索符合条件的学生,其中active为true,id或token不等于null。我得到的结果是token==null。我不知道我做错了什么 书籍=[{ 学生:{ 学生资料:[{ 主动:对, 身份证号码:“92839” }] } }, { 学生:{ 学生资料:[{ 主动:对, 令牌:空 }] } }, { 学生:{ 学生资料:[{ 活动:错误, 令牌:“EYTQD” }] } }, { 学生:{ 学生资料:[{ 主动:对, id:null }] } } ] 让学生=书籍。

我有这个对象数组,我试图检索符合条件的学生,其中active为true,id或token不等于null。我得到的结果是token==null。我不知道我做错了什么

书籍=[{
学生:{
学生资料:[{
主动:对,
身份证号码:“92839”
}]
}
},
{
学生:{
学生资料:[{
主动:对,
令牌:空
}]
}
},
{
学生:{
学生资料:[{
活动:错误,
令牌:“EYTQD”
}]
}
},
{
学生:{
学生资料:[{
主动:对,
id:null
}]
}
}
]
让学生=书籍。过滤器(stu=>
stu.student.studentInformation.every(y=>y.active)===
true&(y.id!==null | | y.token!==null)))

console.log(学生)只需使用
&&
,当令牌和id不等于null时返回true

var书籍=[{
学生:{
学生资料:[{
主动:对,
身份证号码:“92839”
}]
}
},
{
学生:{
学生资料:[{
主动:对,
令牌:空
}]
}
},
{
学生:{
学生资料:[{
活动:错误,
令牌:“EYTQD”
}]
}
},
{
学生:{
学生资料:[{
主动:对,
id:null
}]
}
}
]
让学生=书籍。过滤器(stu=>
(stu.student.studentInformation.every(y=>(y.active=true&&(y.id!==null&&y.token!==null)());

console.log(学生)
您可以使用
reduce
forEach
。在
reduce
callback中迭代
studentInformation
并检查条件,然后将其推送到累加器数组中

let book=[
{
学生:{
学生资料:[
{
主动:对,
身份证号码:“92839”
}
]
}
},
{
学生:{
学生资料:[
{
主动:对,
令牌:空
}
]
}
},
{
学生:{
学生资料:[
{
活动:错误,
令牌:“EYTQD”
}
]
}
},
{
学生:{
学生资料:[
{
主动:对,
id:null
}
]
}
}
]
控制台日志(书籍)
让学生=书本。减少(函数(acc,curr){
当前学生信息forEach(功能(项目){
if(item.active&&item.token!==null&&item.id!==null){
附件推送(项目)
}
}) 
返回acc;
},[])

console.log(学生)
|
应该是
&&
。但是您并不需要同时使用这两种
==
=,只需使用
=
@Barmar:“id或token不等于null。”这有点难以解释,但有理由猜测这意味着类似于
('id'在info&&info.id!==null)| |('token'在info&&token.info!==null)
在这种情况下,这显然不是那个问题的重复。哎呀,出于某种原因,我以为他在比较同一个变量,有一次是与
=然后使用
==。不知道我怎么误读了。