有没有可能让枚举列表按照这些枚举声明的顺序进行排序?
enum MyEnum {
VALUE_1,
VALUE_3,
VALUE_2
}
我创建了一个随机顺序的列表
let list = [MyEnum.VALUE_3, MyEnum.VALUE_1, MyEnum.VALUE_2];
但它是在声明枚举时排序的
[MyEnum.VALUE_1, MyEnum.VALUE_3, MyEnum.VALUE_2]
PS:我真的很想知道typescript是否像Java中那样对列表进行了直接排序,而不必自己排序。如果我必须自己排序列表,如果顺序发生变化,我很容易出错。
4条答案
按热度按时间qpgpyjmq1#
刚才也有同样的问题。这是我的解决方案:
(打字机Playground)
zzwlnbp82#
如果您查看枚举的已编译javascript:
您将看到每个字符串都根据位置获得一个序数,因此第一个是0,最后一个是2。
如果你引用一个枚举,你只会得到一个数字:
如果要对列表进行排序:
如果你希望枚举的字符串名称列表按序号排序,那么你可以:
(code在Playground)
编辑
无论如何设置枚举值,都可以用同样的方式进行排序,只需更改compare function。
例如,这将根据枚举字符串值的字典顺序对列表进行排序:
(code在Playground)
编辑#2
按枚举的原始顺序排序很棘手,您可以尝试:
(code在Playground)
这似乎是可行的,但你不应该指望在for/in循环中接收到的顺序,除非你不关心跨浏览器行为(或特定的资源管理器支持),你可以在MDN中阅读它。
r1zk6ea13#
这是另一个解决方案,即使其他参与者改变了枚举的顺序,也可以防止缺陷。
a2mppw5e4#
我发现了这一点,并在我的应用程序中进行了测试:
output: ["正在申请", "被拒申请", "书已遗失"]