我有一个对象,它定义了一组最初设置为false的用户权限。我有一个包含多个元素的数组。基于每个元素,我需要更新权限对象。
以下是示例代码。
var environment = 'DEV';
var permissions = {
superadmin: false,
admin: false,
developer: false,
tester: false,
general: false,
grp1: false,
grp2: false,
grp3: false,
grp4: false,
grp5: false,
env: environment
};
var user = " azg_environment_DEV_grp4%2Cazg_environment_DEV_Admin%2Cazg_environment_DEV_grp5%2Cazg";
var decodeURIUser = decodeURIComponent(user).split(",");
var permissionsArray = _.filter(decodeURIUser, function(s) {
return s.indexOf('azg_environment_') !== -1;
});
var permissionsList = _.filter(permissionsArray, function(e) {
return e.indexOf(environment) !== -1
});
console.log(permissionsList);
if (_.some(permissionsList, function(e) {
return e.indexOf("SuperAdmin") !== -1
})) {
permissions.superadmin = true;
permissions.admin = true;
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Admin") !== -1
})) {
permissions.admin = true;
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Developer") !== -1
})) {
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Tester") !== -1
})) {
permissions.tester = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp1") !== -1
})) {
permissions.grp1 = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("grp2") !== -1
})) {
permissions.grp2 = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("grp3") !== -1
})) {
permissions.grp3 = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("grp4") !== -1
})) {
permissions.grp4 = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("grp5") !== -1
})) {
permissions.grp5 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("General") !== -1
})) {
permissions.general = true;
}
console.log(permissions);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
该函数不会将grp5更新为true。我如何实现这一目标,以便我的最终目标是
var permissions = {
superadmin: true,
admin: false,
developer: true,
tester: true,
general: true,
grp1: false,
grp2: false,
grp3: false,
grp4: true,
grp5: true,
env: environment
};
答案 0 :(得分:2)
这是因为在进行if(){ .. } else if(){ ... }
比较时,您正在进行grp
。
grp4
正在实现,因此不会检查grp5
。
您只需要多个if
var environment = 'DEV';
var permissions = {
superadmin: false,
admin: false,
developer: false,
tester: false,
general: false,
grp1: false,
grp2: false,
grp3: false,
grp4: false,
grp5: false,
env: environment
};
var user = " azg_environment_DEV_grp4%2Cazg_environment_DEV_Admin%2Cazg_environment_DEV_grp5%2Cazg";
var decodeURIUser = decodeURIComponent(user).split(",");
var permissionsArray = _.filter(decodeURIUser, function(s) {
return s.indexOf('azg_environment_') !== -1;
});
var permissionsList = _.filter(permissionsArray, function(e) {
return e.indexOf(environment) !== -1
});
console.log(permissionsList);
if (_.some(permissionsList, function(e) {
return e.indexOf("SuperAdmin") !== -1
})) {
permissions.superadmin = true;
permissions.admin = true;
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Admin") !== -1
})) {
permissions.admin = true;
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Developer") !== -1
})) {
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Tester") !== -1
})) {
permissions.tester = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp1") !== -1
})) {
permissions.grp1 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp2") !== -1
})) {
permissions.grp2 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp3") !== -1
})) {
permissions.grp3 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp4") !== -1
})) {
permissions.grp4 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp5") !== -1
})) {
permissions.grp5 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("General") !== -1
})) {
permissions.general = true;
}
console.log(permissions);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
FYI在没有大量_.some
的情况下,可能有更简单的方法来实现您在此处尝试的操作。想。
更新(一种可能的次要代码优化)
function checkPresence(permissionsList, str){
_.some(permissionsList, function(e) {
return e.indexOf("grp1") !== -1
})
}
现在在您的代码中使用它_.some
if(permissionsList, "General"){
// ....
}