24

在 JavaScript 中使用 Enums 这个方法?在我们的代码中创建枚举..

所以

var types = {
  "WHITE" : 0,
  "BLACK" : 1
}

现在的问题是,当我想在任何地方创建验证时,我必须这样做;

model.validate("typesColumn", [ types.WHITE, types.BLACK ]);

现在有没有一种方法可以简单地将类型中的值转换为数组,这样我就不必列出枚举的所有值?

model.validate("typesColumn", types.ValuesInArray]);

编辑:我创建了一个非常简单的枚举库来生成简单的枚举npm --save-dev install simple-enumhttps://www.npmjs.com/package/simple-enum

4

5 回答 5

68

简单的解决方案(ES6)

你可以Object.values这样使用:

var valueArray = Object.values(types);

在线演示(小提琴)

于 2017-11-25T08:29:58.893 回答
14

我会将地图转换为数组并将其存储为types.all. 您可以创建一个自动执行此操作的方法:

function makeEnum(enumObject){
   var all = [];
   for(var key in enumObject){
      all.push(enumObject[key]);
   }
   enumObject.all = all;
}
于 2013-08-09T15:52:54.380 回答
8
var types = {
  "WHITE" : 0,
  "BLACK" : 1
}
var typeArray = Object.keys(types).map(function(type) {
    return types[type];
});
//typeArray [0,1]

model.validate("typesColumn", typeArray);

jsFiddle 演示

于 2013-08-09T16:02:37.720 回答
2

您可以将其转换为数组,或者您可以只迭代对象的属性(这就是您创建数组的方式):

for(var i in types){
    var type = types[i];
    //in the first iteration: i = "WHITE", type = 0
    //in the second iteration: i = "BLACK", type = 1
}

为了完整起见,您可以使用该方法创建数组,如下所示:

var arr = [];
for(var i in types){
    var type = types[i];
    arr.push(type);
}
//arr = [0, 1]

要使其可重用,您可以创建一个辅助函数:

function ObjectToValueArray(obj){
    var arr = [];
    for(var i in obj){
        var v = obj[i];
        arr.push(v);
    }
    return arr;
}

可以这样调用:

model.validate("typesColumn", ObjectToValueArray(types));
于 2013-08-09T15:48:26.913 回答
1

榨汁(或包装).validate使其接受types所有成员的含义?

var types = {
  "WHITE" : 0,
  "BLACK" : 1,
  "RED"   : 200
}

validate("foo", types.WHITE); // 0
validate("foo", [types.WHITE, types.BLACK]); // 0,1 
validate("foo", types); // 0,1,200

function validate(foo, values) { 
    var arr = [];
    switch (typeof values) {
        case "number":
            arr.push(values);
            break;
        case "object":
            if (values instanceof Array) 
                arr = values;
            else {
                for (var k in values)
                    arr.push(values[k]);
            }
            break;
    }
    alert(arr);
}
于 2013-08-09T16:24:25.327 回答