javascript - משווה ב-Typescript למיון מותאם אישית במערך


אז אני רוצה להשתמש במיון מותאם אישית על מערך שאני מקבל שתמיד בסדר שונה: [{code: 'A'},{code: 'O'},{code: 'I'}], [{code: 'O'},{code: 'A'},{code: 'I'}], ...

אני רוצה את זה בסדר [{code: 'A'},{code: 'O'},{code: 'I'}].

export function someSort(arrayToSort): Array {
  if (!arrayToSort || arrayToSort.length < 1) {
    return [];
  }
  const sorted = new Map();
  const sorting = ['A', 'O', 'I'];

  for (let i = 0; i < sorting.length; ++i) {
    sorted.set(sorting[i], i);
  }
  return arrayToSort.sort((a, b) => sorted.get(a.code) - sorted.get(b.code));
}

ניסיתי את זה כשאני מוסיף את המיון שאני רוצה למפה עם המפתח 'A' וכערך מספר כדי שזה יהיה ניתן למיון, אבל אני מקבל שגיאה core.js:15724 ERROR TypeError: Cannot assign to read only property '0' of object '[object Array]' ועכשיו אני נגמר לי הרעיונות.

תשובה #1

אתה מושך רחוק מדי.

שימוש במערך בלבד למיון מספיק, הסתמך על המיקום של הפריטים בו.

const data = [
  { code: 'O' },
  { code: 'A' },
  { code: 'I' },
];

const order = ['A', 'O', 'I'];

const sorted = data.sort((a, b) => order.indexOf(a.code) - order.indexOf(b.code));

console.log(sorted);

תשובה #2

המערך מגיע מחנות ה-Redux והוא בלתי ניתן לשינוי, אז פתרתי את זה על ידי ביצוע slice() לפני שאני קורא ל-sort(). אבל עדיין הפתרון של @Maryannah הרבה יותר טוב מהפתרון שלי.