2016-09-17 58 views
0

在JavaScript代码,我已经定义了以下枚举:转换JavaScript的枚举密钥串为值

MyMessageIds = { 
    UndefinedId : 0, 
    FilenameId : 1, 
    BuildFileId : 2, 
    MovementArgsId : 3, 
    MoveId : 4, 
    ExecuteCommandId : 5 
} 

在JavaScript功能,我想是能够提供一个枚举键的字符串表示(即“MoveId”)并返回它的整数值4.那么我怎么能做到这一点?

+0

也许我不完全理解你的问题,但你只是用'MyMessageIds.MoveId'(或可替代'MyMessageIds [ “MoveId”]'来获得整数值。 – Quantastical

+0

MyMessageIds [“MoveId”] ---这就是我一直在寻找的......谢谢。 – chuckp

+0

我如何去相反的方向?我有号码,想要这个名字? – SomeRandomDeveloper

回答

3

只需使用括号标记:

var MyMessageIds = { 
    UndefinedId : 0, 
    FilenameId : 1, 
    BuildFileId : 2, 
    MovementArgsId : 3, 
    MoveId : 4, 
    ExecuteCommandId : 5 
}; 

function getValue(key) { 
    return MyMessageIds[key]; 
} 
0

你可以创造出带宾语(ENUM)的一些实用方法计算出如何获得钥匙/值。

var MyMessageIds = { 
 
    UndefinedId : 0, 
 
    FilenameId : 1, 
 
    BuildFileId : 2, 
 
    MovementArgsId : 3, 
 
    MoveId : 4, 
 
    ExecuteCommandId : 5 
 
} 
 

 
function getEnumKeys(enumType) { 
 
    return Object.keys(MyMessageIds); 
 
} 
 

 
function getEnumValues(enumType) { 
 
    return getEnumKeys(enumType).map(function(key) { 
 
    return enumType[key]; 
 
    }); 
 
} 
 

 
function getEnumValue(enumType, key) { 
 
    return enumType[getEnumKeys(enumType).filter(function(k) { 
 
    return key === k; 
 
    }).pop() || '']; 
 
} 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify({ 
 
    'Enum Keys' : getEnumKeys(MyMessageIds), 
 
    'Enum Vals' : getEnumValues(MyMessageIds), 
 
    'Example' : { 
 
    'MoveId' : getEnumValue(MyMessageIds, 'MoveId') 
 
    } 
 
}, null, 4) + '</pre>';

你也可以创建自己的类对象,以表示它具有可重复使用的方法枚举。

function Enum() { 
 
    this.self = arguments[0]; 
 
} 
 
Enum.prototype = { 
 
    keys : function() { 
 
    return Object.keys(this.self); 
 
    }, 
 
    values : function() { 
 
    var me = this; 
 
    return this.keys(this.self).map(function(key) { 
 
     return me.self[key]; 
 
    }); 
 
    }, 
 
    getValueByName : function(key) { 
 
    return this.self[this.keys(this.self).filter(function(k) { 
 
     return key === k; 
 
    }).pop() || '']; 
 
    }, 
 
    getNameByValue : function(value) { 
 
    var me = this; 
 
    return this.keys(this.self).filter(function(k) { 
 
     return me.self[k] === value; 
 
    }).pop() || null; 
 
    } 
 
}; 
 

 
var MyMessageIds = new Enum({ 
 
    UndefinedId : 0, 
 
    FilenameId : 1, 
 
    BuildFileId : 2, 
 
    MovementArgsId : 3, 
 
    MoveId : 4, 
 
    ExecuteCommandId : 5 
 
}); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify({ 
 
    'Enum Keys' : MyMessageIds.keys(), 
 
    'Enum Vals' : MyMessageIds.values(), 
 
    'Example' : { 
 
    'MoveId' : MyMessageIds.getValueByName('MoveId'), 
 
    'Val(3)' : MyMessageIds.getNameByValue(3) 
 
    } 
 
}, null, 4) + '</pre>';