如何使用枚举值对数组排序?

时间:2018-11-26 09:52:27

标签: javascript typescript

我想使用一个枚举对数组的元素进行排序,我想知道如何做到这一点,我尝试了一个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

1 个答案:

答案 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);