جاوااسکریپت - چگونه یک آرایه را با استفاده از مقادیر یک enum مرتب کنیم؟


من میخواهم عناصر یک آرایه را با استفاده از یک enum مرتب کنم، میخواهم بدانم چگونه این کار را انجام دهم، من با استفاده از یک دستور 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

پاسخ شماره ۱

معمولاً با یک enum، مقدار از قبل قابل مقایسه است.

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