我如何从一串用冒号分隔的角色中获得数据
How can I get data out of a string of roles separated with colons?
我有一个java字符串,其中用户角色信息用冒号分隔。变量a
可以包含这样的数据:
var a = "Admin:xxxx:Data";
var a = "xxxx";
var a = "Test";
var a = "Admin"
我需要根据该公式设置另一个变量,该变量仅取决于Test、xxx和Data角色是否存在。注意,我已经做了一个检查,以确保Test和xxxx不能同时存在,并且它们必须至少有一个存在。
index = 0 if the 'Test' role appears
index = 1 if the 'xxxx' role appears
index = 100 if the 'Test' and 'Data' role appear
index = 101 if the 'xxxx' and 'Data' roles appear
加上另外四个变量:
isXxxx = true if xxxx appears
isData = true if Data appears
isTest = true if Test appears
isAdmin = true if Admin appears
有一个简单的方法,我可以编码这个。比如,现在我不确定怎么做从变量a中找出个人角色,所以即使有人能给我建议,这可能足以让我继续下去。
如果您只对"如果'xyz'角色存在"感兴趣,您可以使用字符串indexOf (w3schools)函数并检查返回值。例子:
var isAdmin = (a.indexOf("Admin")!=-1);
然后根据你的"is"变量,你可以很容易地形成你的规则:
var index=-1;
if (isAdmin && isXxxx) index=666;
最后,我认为你应该优先考虑你的规则。例如,如果所有"xxxx","Test"answers"Data"都存在于角色中(问题的最后两个规则相互冲突),该怎么办?
基于您已经使用var
初始化变量的事实,我假设您有JavaScript而不是Java代码。除此之外,您还可以这样做:
var a = "Admin:xxxx:Data";
var parts = a.split(':');
for(part in parts) {
console.log(parts[part]);
}
此代码在:
上分割字符串并循环遍历各部分。
另外,我想指出你定义了var a
3次,这是没有必要的。此外,每次赋值都会覆盖a
的现有值。
我最近做了这样一件事。然而,我没有将其存储在以10为基数的整数(如1,10,100等)中,而是使用按位整数(以2为基数)。
下面是一个表格,列出了各种角色的例子,这些角色可以由以下内容组成:
Bits | Data | Role
--------------------
0000 | 0 | Empty
0001 | 1 | 1
0010 | 2 | 2
0011 | 3 | 1,2
0100 | 4 | 3
0111 | 7 | 1,2,3
1001 | 9 | 1,4
并检查它们是否匹配:
function hasAllBits(x, y) {
for (; y > 0; x >>= 1, y >>= 1) // Goes until reached every bit in y
if (y % 2 > x % 2) // modulus 2 takes last bit (even or odd)
return false; // Only possible if y == 1 and x == 0 (y>x)
return true; // It depleted y; x had each bit
}
console.log(hasAllBits(7, 1)); // Check if user with 0111 has role 0001, true
console.log(hasAllBits(4, 1)); // Check if user with 0100 has role 0001, false
console.log(hasAllBits(1, 7)); // Check if user with 0001 has role 0111, false
对于获取每个位的标题,您希望它返回一个数组(因为它可以返回多个角色),因此可以这样做:
function getRoles(r){
var ans=[],roles=['1st','2nd','3rd','Supreme'];
r = r.toString(2).split('').reverse();
for(var i in r) {
if(r[i] == '1') {
if(roles.length > i)
ans.push(roles[i]);
else
ans.push('Unknown');
}
}
return ans;
console.log(getRoles(0)); // []
console.log(getRoles(4)); // ["3rd"]
console.log(getRoles(9)); // ["1st", "Supreme"]
console.log(getRoles(63)); // ["1st", "2nd", "3rd", "Supreme","Unknown","Unknown"]
相关文章:
- javascript函数内部的代码用逗号而不是分号分隔
- 逃脱了单一角色的介绍人,而不是实际角色
- 可以't用回车符分隔那个字符串
- 计算输入中有多少逗号分隔的字符串
- 选择带有空格分隔单词的元素
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- 使用JavaScript分析分隔文本行
- WebMethod在ASP.Net Web角色(Web窗体)中不起作用
- 比较逗号分隔的字符串
- 我应该如何应用if-else条件来向具有不同用户角色的人显示不同的菜单
- 显示使用jquery mobile扫描数据角色=页面上的条形码
- AngularJs基于角色的菜单显示安全问题
- 用分隔符分隔具有多个整数值的字符串的Javascript"重试错误的值
- 活动在magento中记录用户角色和权限
- Javascript-Regex,用于逗号分隔的字母数字
- 使用jquery过滤逗号分隔的span文本
- 在javascript中用逗号分隔的字符串分割值
- 如何在java脚本中用单引号写逗号分隔的值
- 如何将逗号分隔的列表转换为<ul>列表
- 我如何从一串用冒号分隔的角色中获得数据