将枚举转换为值数组(将所有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);
在线演示(小提琴)
- 在节点javascript中使用selenium-webdriver执行“命令”
- 如何通过假设一个默认的内容typesparsingExpress / NodeJs中的缺less内容types的HTTP请求?