作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在下面标记了枚举
enum PermissionEnum {
SU = 1 << 0, // 1
Administrator = 1 << 1, // 2
User = 1 << 2 // 4
}
对于给定值6,我怎样才能得到
字符串[] -> ['管理员', '用户']
数字[] -> [2,4]
最佳答案
您可以将静态函数添加到 enum
命名空间中并使用它来进行转换。
您还可以使用一种技巧从数字中提取设置的位,而不必迭代所有未设置的位:n & (~n+1)
为您提供最低的设置位。
enum PermissionEnum {
SU = 1 << 0, // 1
Administrator = 1 << 1, // 2
User = 1 << 2 // 4
}
namespace PermissionEnum {
export function toValues(n: PermissionEnum) {
const values: string[] = [];
while (n) {
const bit = n & (~n+1);
values.push(PermissionEnum[bit]);
n ^= bit;
}
return values;
}
}
console.log(PermissionEnum.toValues(PermissionEnum.Administrator));
console.log(PermissionEnum.toValues(PermissionEnum.Administrator + PermissionEnum.SU));
输出是:
[ 'Administrator' ]
[ 'SU', 'Administrator' ]
到数字的转换是相同的,但只是推送位
而不进行查找。
关于 typescript 标记的枚举获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45354289/
我是一名优秀的程序员,十分优秀!