2017-06-13 64 views
2

所以,我有一個枚舉:遍歷枚舉和特定屬性的校驗值

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而不是特定枚舉對象的字符串。我現在的方法無法運作,我該如何完成我想要做的事情?

+1

首先,您的枚舉沒有正確定義。它缺少逗號',' – Starx

+0

'enum'仍然是保留的 –

回答

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是在暗示方法。