后端响应一系列动作[“删除”,“取消”,“编辑”,“点击按钮”]等。 返回另一个字符串,其中包含例如“1001”。它代表了采取行动的权利。
因此,在此示例中,我们只能删除并单击按钮。
获得行动权利的最快方法是什么?
(在前端,我需要为每个组件快速获得相应的权利。)
我在考虑循环动作数组,直到有例如取消标签,然后获取索引并使用索引获得相应的0或1.有更快的方法吗?
由于
答案 0 :(得分:1)
var actions = ["delete", "cancel", "edit", "clickbutton"];
var mask = "1001";
var getActions = function (actions, flags) {
flags = flags.split("");
return actions.filter(function (action, i) {
return flags[i] === "1"
});
};
var allowedActions = getActions(actions, mask);
console.log(allowedActions);
console.log("can delete?", allowedActions.includes("delete"));

但是因为我不知道你想要做什么,所以我不能提供更多。
到目前为止,这很简单:
getActions是一个只需要运行一次的函数。
它只返回允许的权限(如果你运行它,第一个控制台输出)
它将操作作为数组以及屏蔽字符串。
在该数组上使用.include会告诉您是否拥有特定权限。
此外,你甚至可以把它变成一个对象:
var actions = ["delete", "cancel", "edit", "clickbutton"];
var mask = "1001";
var getActions = function (actions, flags) {
flags = flags.split("");
var obj = {};
actions.forEach(function (action, i) {
obj[action] = flags[i] === "1";
});
return obj;
};
actions = getActions(actions, mask);
console.log(actions);
console.log("can delete?", actions.delete);
console.log("can cancel?", actions.cancel);
console.log("can foo?", actions.foo);

答案 1 :(得分:1)
这应该这样做:
current.prev = current
var actions = ["delete", "cancel", "edit", "clickbutton"];
var rights = "1001";
function hasRight(right){
return rights[actions.indexOf(right)] === "1";
}
console.log("delete", hasRight("delete"));
console.log("cancel", hasRight("cancel"));
console.log("edit", hasRight("edit"));
console.log("clickbutton", hasRight("clickbutton"));
console.log("foobar", hasRight("foobar")); // returns "false" for invalid actions.
返回actions.indexOf(right)
数组中指定right
的位置。
然后该位置用于从“权利”字符串中获取正确位置的“位”。
然后,将“位”与actions
进行比较,以检查您是否拥有当前权利。
将所有权利存储在易于访问的对象中:
"1"