ภาพรวม
สมมติว่าเรามีอาร์เรย์สองอาร์เรย์ arr1 และ arr2 อิลิเมนต์ของ arr2 ไม่ซ้ำ และทุกอิลิเมนต์ใน arr2 ก็อยู่ใน arr1 ด้วย
เราต้องเขียนฟังก์ชันจัดเรียง arr1 ให้ลำดับสัมพัทธ์ของอิลิเมนต์เหมือน arr2 อิลิเมนต์ที่ไม่อยู่ใน arr2 วางท้ายในลำดับน้อยไปมาก
ตัวอย่าง
อินพุต:
const arr1 = [2,3,1,3,2,4,6,7,9,2,19];
const arr2 = [2,1,4,3,9,6];
เอาต์พุต:
const output = [2,2,2,1,4,3,3,9,6,7,19];
ตัวอย่างโค้ด
const arr1 = [2,3,1,3,2,4,6,7,9,2,19];
const arr2 = [2,1,4,3,9,6];
const relativeSortArray = (arr1, arr2) => {
const map = new Map();
const len = arr2.length;
arr2.forEach((a, i) => {
map.set(a, i);
});
return arr1.sort((a, b) => {
a = map.has(a) ? map.get(a) : len + a;
b = map.has(b) ? map.get(b) : len + b;
return a - b;
});
};
console.log(relativeSortArray(arr1, arr2));
ผลลัพธ์ในคอนโซล
[ 2, 2, 2, 1, 4, 3, 3, 9, 6, 7, 19 ]