如何根据它的值找到属性的字符串值

时间:2014-07-13 17:39:31

标签: javascript

我创建了类似于ENUM的东西:

 var ContentStatusId = {
        All: 0,
        Production: 1,
        Review: 2,
        Draft: 3,
        Concept: 4
    }

所以当我设置:

var a = ContentStatusId.All 

它的值为0

我怎么能朝另一个方向走?如果我知道a = 0且a来自ContentStatusId那么我怎样才能得到字符串“All”?

4 个答案:

答案 0 :(得分:1)

迭代属性,直到找到具有所需值的属性

function findVal(obj, val) {
    for (var prop in obj) {
        if (obj.hasOwnProperty(prop)) { // skip inherited properties
            if (obj[prop] == val) {
                return prop;
            }
        }
    }
    return false;
}

答案 1 :(得分:0)

您必须遍历属性并检查它们是否等于每次迭代的值:

for (var property in ContentStatusId) {
    if (ContentStatusId.hasOwnProperty(property)) {
        if (ContentStatusId[property] == /*value to look for*/) {
            console.log(property);
        }
    }
}

Demo

答案 2 :(得分:0)

你不能直接这样做。你必须把钥匙存放在某个地方......

var a = ['All', ContentStatusId.All];

或更高级:

var a = {
    source: ContentStatusId,
    key: 'All',
    update: function () {
        this.value = this.source[this.key];
    }
};
a.update();

答案 3 :(得分:0)

根据您的操作,您可以迭代对象,或者如果您必须更频繁地执行此操作,只需创建一个可以进行反向查找的数组:

var ContentStatusIdReverse = ["All","Production",...]

ContentStatusIdReverse[0] // Yields "All"

您可以通过迭代对象一次来创建此数组,并且可以通过数组完成所有连续查找。