javascript enum auto-increment?
javascript enum auto-increment?
在objc中,我可以这样使用enum:
typedef enum {
STATE_A = 1,
STATE_B,
STATE_C,
......
STATE_KK = 100,
STATE_FF,
......
STATE_XXX = 99999
} State;
每个变量的值自动增加(与前一个相比)。
但是在javascript中,我需要:
var State = {
STATE_A: 1,
STATE_B: 2,
STATE_C: 3,
......
STATE_KK: 100,
STATE_FF: 101,
......
STATE_XXX = 99999
}
你看,我需要为每个变量指定所有的值,当你这里有很多变量,当你试图在中间插入一个变量时,情况就更糟了你必须问自己(它的值应该是多少??)
我对js很陌生,真的想知道是否有一种方法可以像其他语言一样在js中使用enum例如我提到的objc。
谢谢:)
有点难看,但是你可以这样做:
var i=1;
var State = {
STATE_A: i++,
STATE_B: i++,
STATE_C: i++
}
将它们的初始值都设置为0,然后在循环中设置它们的值
var State = {
STATE_A: 0,
STATE_B: 0,
STATE_C: 0,
......
STATE_KK: 0,
STATE_FF: 0,
......
STATE_XXX = 0
}
var count=0;
for(var key in State){
State[key]=count++;
}
你可以创建你的小枚举生成器,它既可以自动编号,也可以让你设置任何你想要的值(有点像你在objective中的功能:
)function makeEnum(list) {
var obj = {}, sequence = 0, current;
for (var i = 0; i < list.length; i++) {
current = i;
if (typeof list[i+1] === "number") {
sequence = list[i+1];
i++;
}
obj[list[current]] = sequence++;
}
return(obj);
}
var State = makeEnum(["STATE_A","STATE_B","STATE_C", "STATE_KK", 100, "STATE_LL"]);
在传入数组的任何地方放入一个数字,它将设置前一个枚举值的值,然后从该值继续序列。
如果我理解正确的话,您的目标是用数字来识别状态,以便在枚举中进行比较。
首先这里是一个工作小提琴,我认为你的意思。
对于一般的枚举,我使用了一个很好的技巧:
function createEnum(values){
var res={};
for(var i=0;i<values.length;i++){
res[values[i]]=i;//add the property
}
//Object.freeze(res);//optional to make immutable
return res;
};
允许以下语法
var State = createEnum(["STATE_A","STATE_B","STATE_C"]);
这意味着您不必为所有状态显式地定义一个整数值,一个是给定的。之后就可以正常使用了
State.STATE_A===State.STATE_B;//returns 1
如果您希望基于模式填充,您可以按照以下方式扩展它(假设您的语法):
function createEnumPattern(prefix,range){
var res={},str="a";
for(var i=0;i<range;i++){
var pattern = prefix+"_"+inc_str(str);
res[pattern]=i;//add the property
}
//Object.freeze(res);//optional to make immutable
return res;
}
其中inc_str
来自此答案。例如
var State = createEnumPattern("State",100);
将返回具有State_aa
等属性的State
enum,如果您愿意,您可以在其上使用toUpperCase
来强制使用大写约定。
相关文章:
- 单击按钮时Div Increment
- 取消img的css属性宽度和高度(不能使用“auto”)
- 如何在z索引为auto的元素下堆叠
- 有没有一种方法可以检测何时触发了溢出-y:auto,并因此创建一个弹出窗口
- 如何设置'auto'JQuery动画中的高度
- 如何将enum作为json对象
- 溢出:auto无法在BlackBerry设备上工作
- 模仿`overflow-y:auto;overflow-x:visible `在jQuery UI可排序对象上
- JavaScript代码,如TextArea Wrapping或Div溢出:auto
- jQuery变量increment++在脚本中不起作用
- int标记angular/javascript中的enum
- JavaScript 聚合物选项卡不使用 is=“auto-binding” 绑定到页面
- Bacon.js observable.map with auto-catch
- 模型表单中的 Django auto slug
- jQuery DataTables fnRender Increment Column
- Jquery Ui Auto suggestions with Json array
- iframe Auto Height在Firefox上无法正常工作
- JavaScript Auto Complete 搜索栏修改帮助
- Instagram auto like Bookmarklet
- javascript enum auto-increment?