我想使用一个枚举对数组的元素进行排序,我想知道如何做到这一点,我尝试了一个switch
语句,但没有成功。
const enum Order {
Start = 'Start',
Run = 'Run',
End = 'End',
}
const predicate (a, b) => // TODO
const data = [Order.End, Order.Run, Order.Start]
const result = data.sort(predicate)
// wanted result is: // Start, Run, End
答案 0 :(得分:4)
通常带有枚举,该值已经可以比较了。
const enum Order {
Start = 0,
Run = 1,
End = 2,
}
const data = [Order.End, Order.Run, Order.Start];
const result = data.sort();
console.log(result);
一个非常量枚举甚至可以映射到字符串值,如下所示:
enum Order {
Start = 0,
Run = 1,
End = 2,
}
const data = [Order.End, Order.Run, Order.Start];
const result = data.sort();
console.log(result.map((val) => Order[val]));
但是在您的情况下,您可以根据需要将它们转换为易于排序的值(假设您希望避免字母顺序)。
const enum Order {
Start = 'Start',
Run = 'Run',
End = 'End',
}
const predicate = (a, b) => {
const map = {};
map[Order.Start] = 1;
map[Order.Run] = 2;
map[Order.End] = 3;
if (map[a] < map[b]) {
return -1;
}
if (map[a] > map[b]) {
return 1;
}
return 0;
}
const data = [Order.End, Order.Run, Order.Start];
const result = data.sort(predicate);
console.log(result);