将枚举转换为值数组(将所有JSON值放入数组中)

时间:2013-08-09 15:45:55

标签: javascript json node.js enums

我使用此方法Enums in JavaScript?在代码中创建枚举..

所以

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

5 个答案:

答案 0 :(得分:11)

简单解决方案(ES6)

您可以像这样使用Object.values

var valueArray = Object.values(types);

<强> Online demo (fiddle)

答案 1 :(得分:10)

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

function makeEnum(enumObject){
   var all = [];
   for(var key in enumObject){
      all.push(enumObject[key]);
   }
   enumObject.all = all;
}

答案 2 :(得分:6)

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 Demo

答案 3 :(得分: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));

答案 4 :(得分: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);
}