Converting enums to array of values (Putting all JSON values in an array)
我在javascript中使用这个方法枚举?在代码中创建枚举。
所以
1 2 3 4 | var types = { "WHITE" : 0, "BLACK" : 1 } |
现在的问题是,当我想在任何地方创建验证时,我必须这样做;
1 | model.validate("typesColumn", [ types.WHITE, types.BLACK ]); |
现在有没有一种方法可以简单地将类型中的值转换为数组,这样就不必列出枚举的所有值了?
1 | model.validate("typesColumn", types.ValuesInArray]); |
编辑:我创建了一个非常简单的枚举库来生成简单的枚举
简单解决方案(ES6)
您可以这样使用
1 | var valueArray = Object.values(types); |
在线演示(小提琴)
我将把地图转换成一个数组,并将其存储为
1 2 3 4 5 6 7 | function makeEnum(enumObject){ var all = []; for(var key in enumObject){ all.push(enumObject[key]); } enumObject.all = all; } |
1 2 3 4 5 6 7 8 9 10 | var types = { "WHITE" : 0, "BLACK" : 1 } var typeArray = Object.keys(types).map(function(type) { return types[type]; }); //typeArray [0,1] model.validate("typesColumn", typeArray); |
jsFoDel-demo
您可以将其转换为数组,或者只需迭代对象的属性(这也是您创建数组的方式):
1 2 3 4 5 | 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 } |
为了完整起见,可以使用该方法创建数组,如下所示:
1 2 3 4 5 6 | var arr = []; for(var i in types){ var type = types[i]; arr.push(type); } //arr = [0, 1] |
要使此功能可重用,可以创建一个助手函数:
1 2 3 4 5 6 7 8 | function ObjectToValueArray(obj){ var arr = []; for(var i in obj){ var v = obj[i]; arr.push(v); } return arr; } |
可以这样称呼:
1 | model.validate("typesColumn", ObjectToValueArray(types)); |
榨汁(或包装)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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); } |