2017-07-27 119 views
-1

我检举了枚举下面打字稿标记枚举获取值

enum PermissionEnum { 
    SU = 1 << 0,   // 1 
    Administrator = 1 << 1, // 2 
    User = 1 << 2   // 4 
} 

对于给定的值6,我怎样才能得到

串[] - > [ '管理员', '用户']

数[] - > [2,4]

回答

0

这应该工作:

let x: PermissionEnum = PermissionEnum.Administrator | PermissionEnum.User; 

const permNum: number[] = []; 
const permStr: string[] = []; 
let i = 0; 
let perm: number; 
while (PermissionEnum[perm = 1 << i++]) { 
    if (x & perm) { 
     permNum.push(perm); 
     permStr.push(PermissionEnum[perm]); 
    } 
} 
0

您可以在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' ] 

到数字转换将是相同的,但只是推bit没有查找。