Javascript 如何在angularjs中使用三元运算符

Javascript 如何在angularjs中使用三元运算符,javascript,lodash,Javascript,Lodash,我需要根据某些条件返回true或false,我没有获得更干净的代码来执行此操作: 我需要根据此条件隐藏或显示UI上的某些元素,这些元素应返回true或false: scope.isDataEnabled =function(options){ //Here if supppose a comes, // then i need to send true, otherwise false if(!$rootScope.currentPr

我需要根据某些条件返回true或false,我没有获得更干净的代码来执行此操作:

我需要根据此条件隐藏或显示UI上的某些元素,这些元素应返回true或false:

scope.isDataEnabled =function(options){ //Here if supppose a comes,
                           // then i need to send true, otherwise false
    if(!$rootScope.currentProduct.id ==
        ProductConstants.BB_PRODUCT_ID){
            return true;
        }
   else{
       _.map( $rootScope.currentUser.permissions, permissionObj =>{
           // permissions is an Array
           return (permissionObj.module == "BB_DATASET" &&
              permissionObj.values == "b" && options=="a") //need to send true 
                                           //if this condition satisfies
       });
    }
    return false; //but i am going mad here, after returning true,
                  //it comes to this line and sets to false
}

请帮我指引,我应该用什么,来实现它。我想使用三元运算符,但不知道如何在map内部使用它。

首先,map函数内部的返回不会将值返回到外部函数,您只是将结果返回到map函数本身。map函数的结果永远不会返回

此外,我认为您可能希望使用
而不是map
map
用于转换数据,而
some
用于检查某些内容是否符合条件

return _.some($rootScope.currentUser.permissions, permissionObj => {
    return (permissionObj.module == "BB_DATASET"
        && permissionObj.values == "b" 
        && options=="a")
});

这将检查是否有任何权限与给定条件匹配。或者,如果希望所有内容都与条件匹配,则可以使用

首先,map函数的内部返回不会将值返回到外部函数,您只会将结果返回到map函数本身。map函数的结果永远不会返回

return _.some($rootScope.currentUser.permissions, permissionObj => {
    return (permissionObj.module == "BB_DATASET"
        && permissionObj.values == "b" 
        && options=="a")
});
此外,我认为您可能希望使用
而不是map
map
用于转换数据,而
some
用于检查某些内容是否符合条件

return _.some($rootScope.currentUser.permissions, permissionObj => {
    return (permissionObj.module == "BB_DATASET"
        && permissionObj.values == "b" 
        && options=="a")
});

这将检查是否有任何权限与给定条件匹配。或者,您可以使用
如果您希望所有内容都与条件匹配。

将代码简化为可操作的最小测试场景(只需使用普通的旧ES20xx)可能会有所帮助。比如:

return _.some($rootScope.currentUser.permissions, permissionObj => {
    return (permissionObj.module == "BB_DATASET"
        && permissionObj.values == "b" 
        && options=="a")
});
让$rootScope={
当前产品:{
id:`x`
},
当前用户:{
权限:[{
模块:`BB_数据集`,
值:`b`
}, {
模块:`some`,
价值观:`a`
}]
}
};
常量ProductConstants={
BB_产品_ID:`y`
}
log(testMe(`a`));//true(currentProduct.id不是BB\U产品\U id)
ProductConstants.BB_PRODUCT_ID=`x`;
log(testMe(`a`));//真(模块和值和选项)
$rootScope.currentUser.permissions[0]。模块=`AA_DATASET`;
log(testMe(`a`));//false(模块不是BB_数据集)
$rootScope.currentUser.permissions[0]。模块=`BB_DATASET`;
console.log(testMe(`b`));//false(选项不是'a`)
$rootScope.currentUser.permissions[0]。值=`c`;
log(testMe(`a`));//false(值不是'b`)
函数testMe(选项){
if($rootScope.currentProduct.id!==ProductConstants.BB\u PRODUCT\u id){
返回true;
}
const found=$rootScope.currentUser.permissions.find(v=>
v、 模块==`BB_数据集`&&
v、 值==`b`&&
选项==`a`);
返回找到?真:假;
}
。作为控制台包装器{
排名:0;
最大高度:100%!重要;

}
将代码简化为可操作的最小测试场景(只需使用普通的旧ES20xx)可能会有所帮助。比如:

让$rootScope={
当前产品:{
id:`x`
},
当前用户:{
权限:[{
模块:`BB_数据集`,
值:`b`
}, {
模块:`some`,
价值观:`a`
}]
}
};
常量ProductConstants={
BB_产品_ID:`y`
}
log(testMe(`a`));//true(currentProduct.id不是BB\U产品\U id)
ProductConstants.BB_PRODUCT_ID=`x`;
log(testMe(`a`));//真(模块和值和选项)
$rootScope.currentUser.permissions[0]。模块=`AA_DATASET`;
log(testMe(`a`));//false(模块不是BB_数据集)
$rootScope.currentUser.permissions[0]。模块=`BB_DATASET`;
console.log(testMe(`b`));//false(选项不是'a`)
$rootScope.currentUser.permissions[0]。值=`c`;
log(testMe(`a`));//false(值不是'b`)
函数testMe(选项){
if($rootScope.currentProduct.id!==ProductConstants.BB\u PRODUCT\u id){
返回true;
}
const found=$rootScope.currentUser.permissions.find(v=>
v、 模块==`BB_数据集`&&
v、 值==`b`&&
选项==`a`);
返回找到?真:假;
}
。作为控制台包装器{
排名:0;
最大高度:100%!重要;

}
$rootScope.currentProduct.id==ProductConstants.BB_PRODUCT_id
应该是
$rootScope.currentProduct.id!==ProductConstants.BB_PRODUCT_ID
我想。先试试好吧,我纠正了。。但我的问题还是一样。进入else块后,对于其他值,它将设置为false,但对于值“a”,在设置为true后,它将再次设置为false
$rootScope.currentProduct.id==ProductConstants.BB_PRODUCT_id
应该是
$rootScope.currentProduct.id!==ProductConstants.BB_PRODUCT_ID
我想。先试试好吧,我纠正了。。但我的问题还是一样。进入else块后,对于其他值,它将设置为false,但对于值“a”,在设置为true后,它将再次设置为false