行动数组[“删除”,“取消”]和由字符串“01”

时间:2016-12-02 13:36:46

标签: javascript arrays algorithm typescript

后端响应一系列动作[“删除”,“取消”,“编辑”,“点击按钮”]等。 返回另一个字符串,其中包含例如“1001”。它代表了采取行动的权利。

因此,在此示例中,我们只能删除并单击按钮。

获得行动权利的最快方法是什么?

(在前端,我需要为每个组件快速获得相应的权利。)

我在考虑循环动作数组,直到有例如取消标签,然后获取索引并使用索引获得相应的0或1.有更快的方法吗?

由于

2 个答案:

答案 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"