代码之家  ›  专栏  ›  技术社区  ›  Radex

如何使用枚举中的值对数组进行排序?

  •  2
  • Radex  · 技术社区  · 6 年前

    我想使用枚举对数组的元素进行排序,我想知道如何排序,我已经尝试了 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 回复  |  直到 6 年前
        1
  •  4
  •   Fenton    6 年前

    通常对于枚举,该值已经是可比较的。

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