考虑我在我的应用程序中的以下常量:
const Actions = {
SONGS_CHANGED: 0,
PREVIEW_TAG_CHANGES: 1,
END_PREVIEW: 2,
SAVE_TAGS: 3,
PATTERNS_UPDATED: 4,
PATTERN_MAPPED: 5,
PATTERN_UNMAPPED: 6,
CHANGE_NUMBER_OF_PARENT_DIRECTORIES: 7,
}
我正在努力将这些组合在一起。但这意味着如果我在第一组中添加一个,那么我必须更新它下面的所有数字。好吧,显然我不有,我总是可以给它分配下一个更高的数字(例如,给下一个常量值8
,无论我把它放在哪个“组”在)。但随着常数的增加,识别最高数字以便知道下一个应该是多少就会变得更难。
在python中,使用像range()
之类的东西来生成常量的数字会完全消除这个问题。什么是一个很好的JavaScript方法?
答案 0 :(得分:3)
如果您确实想要按照定义的顺序对它们进行编号,则可以使用递增变量来执行此操作:
var x = 0;
const Actions = {
SONGS_CHANGED: x++,
PREVIEW_TAG_CHANGES: x++,
END_PREVIEW: x++,
SAVE_TAGS: x++,
PATTERNS_UPDATED: x++,
PATTERN_MAPPED: x++,
PATTERN_UNMAPPED: x++,
CHANGE_NUMBER_OF_PARENT_DIRECTORIES: x++,
}
console.log(Actions.END_PREVIEW); //2
console.log(Actions.SAVE_TAGS); //3
请注意,只有在使用这些数字的唯一地方是引用常量时才应使用这种方式更改常量 - 如果您将它们存储在别处等,那么更改它们将破坏现有的存储数据。选择取决于它们是否在运行时保持不变,或者应该永久保持不变。
答案 1 :(得分:2)
如果您知道(或可以估计)先验每个组的大小,那么您可以使用不同的数字子范围:
const Actions = {
SONGS_CHANGED: 0,
PREVIEW_TAG_CHANGES: 1,
END_PREVIEW: 2,
SAVE_TAGS: 3,
PATTERNS_UPDATED: 10,
PATTERN_MAPPED: 11,
PATTERN_UNMAPPED: 12,
CHANGE_NUMBER_OF_PARENT_DIRECTORIES: 50,
}
优于James Thorpe解决方案的优势在于它向后兼容,即您不会修改以前定义的值。
答案 2 :(得分:0)
一种完全不同的方法,根据您的常量可以采用的值,可能适合也可能不适合,但如果它们可以是字符串,则可以使用基于GUID的方法:
const Actions = {
SONGS_CHANGED: '4e6c355f-d684-4544-8320-529f20c89ce7',
PREVIEW_TAG_CHANGES: '39a34b2b-0467-46f9-9d21-f407f89ae3c7',
END_PREVIEW: '350e1d61-e6f9-4cc5-9364-bbdc14fd7063',
SAVE_TAGS: '32e85a98-e13c-480c-9449-0a5bec7ec13c',
PATTERNS_UPDATED: '16536175-e421-40d9-9d5d-962bcd0f0771',
PATTERN_MAPPED: '0fd2bbd8-91f4-413b-8010-736bcacd1d88',
PATTERN_UNMAPPED: 'b946d566-d951-4695-a0ce-56b0bf987eb6',
CHANGE_NUMBER_OF_PARENT_DIRECTORIES: '5b0736f5-e5e9-48f3-a9a1-bed8d0882beb',
}
然后,您可以在任何地方添加新常量,而无需担心更改现有值,或者需要了解将来可能需要的大致数量。有很多种方法可以生成GUID,例如this online tool。