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 הרבה יותר טוב מהפתרון שלי.
