Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

เรียงอาร์เรย์ออบเจกต์ตามลำดับอาร์เรย์อ้างอิง - JavaScript

เรียงอาร์เรย์ของออบเจกต์ ให้ลำดับ 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)