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

我用这个方法在JavaScript中枚举? 在我们的代码中创build枚举

所以

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

现在的问题是我想在任何地方创buildvalidation,我必须这样做;

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

现在有什么办法可以简单地将types中的值转换为数组,以便我不必列出枚举的所有值?

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

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

我将地图转换成一个数组,并将其存储为types.all 。 你可以创build一个自动完成的方法:

 function makeEnum(enumObject){ var all = []; for(var key in enumObject){ all.push(enumObject[key]); } enumObject.all = all; } 
 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演示

你可以将它转换为一个数组,或者你可以迭代对象的属性(无论如何你将创build这个数组):

 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 } 

只是为了完整性,您可以使用该方法创build数组,如下所示:

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

为了使这个可重用,你可以创build一个辅助函数:

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

这可以这样调用:

 model.validate("typesColumn", ObjectToValueArray(types)); 

Juice up(或者wrap) .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); } 

简单的解决scheme(ES6)

你可以像这样使用Object.values

 var valueArray = Object.values(types); 

在线演示(小提琴)