循环枚举并检查特定属性的值

时间:2017-06-13 13:16:08

标签: javascript

所以我有一个枚举:

var enum = {
    aitem: {
        Desc: 'A description',
        Value: 0,
        Group: 'A'
    },
    bitem: {
        Desc: 'b description',
        Value: 1,
        Group: 'B'
    },
    bitem: {
        Desc: 'c description',
        Value: 2,
        Group: 'C'
    }
}
var neededGroup = 'A';
var neededValues = [];

//x.Group & x.Value don't exist
for (var x in enum){
    if (x.Group == neededGroup){
        neededValues.push(x.Value);
    }
}

所以,基本上我想遍历我的枚举并检查组是否等于特定组,如果是,我想将该值推送到数组。但是,x似乎只是一个字符串,表示例如aitem而不是特定的枚举对象。由于我目前的方法不起作用,我如何完成我想要做的事情?

2 个答案:

答案 0 :(得分:2)

如果您只关注现代浏览器,那么您可以使用...代替:

for (var x of yourEnum){
    if (x.Group == neededGroup){
        neededValues.push(x.Value);
    }
}

如果您还关注旧浏览器,则需要手动从枚举中提取对象:

for (var key in yourEnum){
    var x = yourEnum[key];
    if (x.Group == neededGroup){
        neededValues.push(x.Value);
    }
}

答案 1 :(得分:0)

enum是保留关键字,因此您不应使用此类保留关键字。

在下面找到代码的工作示例:

var t_enum = {
    aitem: {
        Desc: 'A description',
        Value: 0,
        Group: 'A'
    },
    bitem: {
        Desc: 'b description',
        Value: 1,
        Group: 'B'
    },
    bitem: {
        Desc: 'c description',
        Value: 2,
        Group: 'C'
    }
}
var neededGroup = 'A';
var neededValues = [];

Object.keys(t_enum).forEach(function (x) {
    var item = t_enum[x];
    if (item.Group == neededGroup){
        neededValues.push(item.Value);
        return;
    }
})
console.log(neededValues);

Demo

这是Toddo建议的另一种方法。