Javascript 结合es6函数every和sum并返回布尔值

Javascript 结合es6函数every和sum并返回布尔值,javascript,foreach,ecmascript-6,Javascript,Foreach,Ecmascript 6,我有一个JSON响应 { "nextAction": [{ "userList": [{ "id": 8, "email": "testemail@gmail.com", "name": "John Doe" }], "buttonLabel": "Finalize Now" }, {

我有一个JSON响应

{
    "nextAction": [{
            "userList": [{
                "id": 8,
                "email": "testemail@gmail.com",
                "name": "John Doe"
            }],
            "buttonLabel": "Finalize Now"
        },
        {
            "userList": [{
                "id": 10,
                "email": "newemail@gmail.com",
                "name": "Test User"
            }],
            "buttonLabel": "Start Now"
        }
    ]
}
userList
数组有时包含
null
对象。 我在满足以下3个条件的条件下工作

  • nextAction
    数组应为非空
  • userList
    数组不应包含
    null
    元素
  • currentUser
    应该出现在
    userList
    数组中
  • const数据=[{
    “用户列表”:[{
    “id”:8,
    “电子邮件”:testemail@gmail.com",
    “姓名”:“约翰·多伊”
    }],
    “按钮标签”:“立即完成”
    },
    {
    “用户列表”:[{
    “id”:10,
    “电子邮件”:newemail@gmail.com",
    “名称”:“测试用户”
    }],
    “按钮标签”:“立即开始”
    }]
    函数CheckFormyTextActions(myNextActions,currentUser){
    const checkUsername=obj=>obj.email==currentUser;
    return(myNextActions.forEach)((myAction,index)=>{
    (myAction.userList.length)&&
    myAction.userList.every(userList=>
    用户列表!==null)&&
    myAction.userList.some(检查用户名)
    )
    }))
    }
    var result=checkForMyNextActions(数据)testemail@gmail.com")
    
    console.log(result)
    您只需使用
    Array.reduce()
    即可:

    const data=[{“userList”:[{“id”:8,“email”:”testemail@gmail.com,“名称”:“John Doe”}],“按钮标签”:“立即完成”}];
    函数CheckFormyTextActions(myNextActions,currentUser){
    const checkUsername=obj=>obj.email==currentUser;
    返回myNextActions.reduce((a,curr)=>{
    让bool=curr.userList.length&&curr.userList.every(userList=>userList!==null)和&curr.userList.some(checkUsername);
    返回bool&a;
    },对)!=0;
    }
    var result=checkForMyNextActions(数据)testemail@gmail.com")
    
    console.log(result)
    checkForMyNextActions返回未定义,因为
    forEach
    返回未定义。使用
    map
    对数组中的每个元素调用函数,并使用函数的返回值返回新数组。另外,传递给forEach的内部函数不会返回任何内容。

    您可以通过&:

    var obj={
    “nextAction”:[{
    “用户列表”:[{
    “id”:8,
    “电子邮件”:testemail@gmail.com",
    “姓名”:“约翰·多伊”
    }],
    “按钮标签”:“立即完成”
    }]
    }
    const getUser=(usr)=>obj.nextAction.some(({
    用户列表
    }) =>
    userList?(userList.every(userList=>userList!==null)&&
    userList.find(y=>y.email==usr)):false)
    console.log(getUser(“testemail@gmail.com)//对
    
    console.log(getUser(“test@gmail.com"))//false
    当userList为空条件时,此操作是否有效?请稍候,但我认为您的第二条规则是:
    userList数组不应包含空元素。
    ?是的,我还需要验证userList没有任何空条目作为对结果的解释:
    forEach
    不会返回任何内容,即将返回
    未定义的
    。当您执行
    undefined&&anything
    时,您总是会得到
    undefined
    ,这是JavaScript的结果。有关解决方案,请参阅现有答案!