我正在尝试找到迭代Google Closure中定义的枚举上的所有值的最佳方法。假设我定义了以下枚举:
/**
* @enum {number}
*/
sample.namespace.Fruit = {
Orange: 0,
Apple: 1,
Banana: 2
};
现在,我看到这样做的最佳方式是:
for (var key in sample.namespace.Fruit) {
var fruit = /** @type {sample.namespace.Fruit} */ (sample.namespace.Fruit[key]);
// Make a smoothie or something.
}
我认为阅读很痛苦。我正在列出一个名称空间三次,只是为了让编译器出现。我应该使用另一种迭代技术吗?这是完成这种迭代形式的最佳方法吗?
答案 0 :(得分:5)
您可以使用goog.object.forEach
来避免名称空间重复。
goog.object.forEach(sample.namespace.Fruit,
function(value, key, allValues) {
// Make some delicious fruit jellies or something.
});
作为旁注,在大多数情况下,您希望避免为@enums使用字符串键,以便编译器可以重命名。
答案 1 :(得分:2)
您可以使用 for循环来迭代对象..
var obj = sample.namespace.Fruit;
for(var key in obj) {
console.log("Fruit :: " + key + " -- " + obj[key])
}
<强> Check Fiddle 强>