我使用此方法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-enum
(https://www.npmjs.com/package/simple-enum)
答案 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);
答案 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);
}