เรียงอาร์เรย์ของออบเจกต์ ให้ลำดับ Key ตรงกับอาร์เรย์อ้างอิง (Reference Array)
ตัวอย่าง
ref = ['d','a','b','c']
arr = [{a:1}, {c:3}, {d:4}, {b:2}]
→ [{d:4}, {a:1}, {b:2}, {c:3}]
ตัวอย่างโค้ด
const sortArray = (ref, arr) => {
arr.sort((a, b) => {
const keyA = Object.keys(a)[0];
const keyB = Object.keys(b)[0];
return ref.indexOf(keyA) - ref.indexOf(keyB);
});
};
const ref = ['d','a','b','c'];
const arr = [{a:1}, {c:3}, {d:4}, {b:2}];
sortArray(ref, arr);
console.log(arr);
ผลลัพธ์
[ { d: 4 }, { a: 1 }, { b: 2 }, { c: 3 } ]
Optimization: Pre-compute Index Map
const sortArray = (ref, arr) => {
const order = new Map(ref.map((key, i) => [key, i]));
arr.sort((a, b) => order.get(Object.keys(a)[0]) - order.get(Object.keys(b)[0]));
};
สร้าง Map key → index ก่อน ทำให้ Sort เป็น O(n log n) แทน O(n² log n)