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

การเรียงลำดับด้วยคุณสมบัติ 'next' และ 'previous' (JS Comparator Function)


นี่คืออาร์เรย์ออบเจ็กต์ตัวอย่าง แต่ละออบเจ็กต์แทนหน้าของเว็บไซต์หลายหน้า มี next property (ยกเว้นหน้าสุดท้าย) ชี้ไป id ของอีกออบเจ็กต์ และ previous property (ยกเว้นหน้าแรก) ชี้ไป id ของออบเจ็กต์ก่อนหน้า

ออบเจ็กต์เหล่านี้อยู่ในลำดับสุ่ม เราต้องเรียงให้ถูกต้อง −

let arr = [    { id: "1325asdfasdasd", next: "5345341fgdfgdd", previous:"545234123fsdfd" },    { id: "das987as9dya8s", next: "3j12k3b1231jkj" },    { id: "89ad8sasds9d8s", previous: "1j3b12k3jbasdd" },    { id: "5345341fgdfgdd", next: "1j3b12k3jbasdd", previous:"1325asdfasdasd" },    { id: "1423123123asfd", next: "545234123fsdfd", previous:"3j12k3b1231jkj" },    { id: "1j3b12k3jbasdd", next: "89ad8sasds9d8s", previous:"5345341fgdfgdd" },    { id: "3j12k3b1231jkj", next: "1423123123asfd", previous:"das987as9dya8s" },    { id: "545234123fsdfd", next: "1325asdfasdasd", previous:"1423123123asfd" }, ];

เราต้องการเรียงให้ออบเจ็กต์ที่ไม่มี previous อยู่หน้าสุด ไม่มี next อยู่ท้ายสุด และ next/previous ชี้ถูกต้อง

แก้ปัญหา 2 ขั้นตอน −

ขั้นตอน 1 − วนลูปอาร์เรย์ เก็บ id เป็น Key และ object เป็น Value ใน Map เก็บออบเจ็กต์ที่ไม่มี previous ไว้ตัวแปรแยก −

const objectMap = new Map(); let firstObject; const sortedArray = []; for(const obj of arr){    objectMap.set(obj.id, obj);    if(!obj.previous){       firstObject = obj;    } }

ขั้นตอน 2 − เริ่มลูปจาก firstObject เข้าถึงและ Push next object ต่อเนื่องจนจบ −

for(let start = firstObject; start; start = objectMap.get(start.next)){    sortedArray.push(start); }; console.log(sortedArray);

โค้ดเต็มพร้อม Output ด้านล่าง

ตัวอย่าง

let arr = [    { id: "1325asdfasdasd", next: "5345341fgdfgdd", previous:"545234123fsdfd" },    { id: "das987as9dya8s", next: "3j12k3b1231jkj" },    { id: "89ad8sasds9d8s", previous: "1j3b12k3jbasdd" },    { id: "5345341fgdfgdd", next: "1j3b12k3jbasdd", previous:"1325asdfasdasd" },    { id: "1423123123asfd", next: "545234123fsdfd", previous:"3j12k3b1231jkj" },    { id: "1j3b12k3jbasdd", next: "89ad8sasds9d8s", previous:"5345341fgdfgdd" },    { id: "3j12k3b1231jkj", next: "1423123123asfd", previous:"das987as9dya8s" },    { id: "545234123fsdfd", next: "1325asdfasdasd", previous:"1423123123asfd" }, ]; const objectMap = new Map(); let firstObject; const sortedArray = []; for(const obj of arr){    objectMap.set(obj.id, obj);    if(!obj.previous){       firstObject = obj;    } } for(let start = firstObject; start; start = objectMap.get(start.next)){    sortedArray.push(start); }; console.log(sortedArray);

ผลลัพธ์

ผลลัพธ์ใน Console จะเป็น −

[    { id: 'das987as9dya8s', next: '3j12k3b1231jkj' },    {       id: '3j12k3b1231jkj',       next: '1423123123asfd',       previous: 'das987as9dya8s'    }, {    id: '1423123123asfd',    next: '545234123fsdfd',    previous: '3j12k3b1231jkj' }, {    id: '545234123fsdfd',    next: '1325asdfasdasd',    previous: '1423123123asfd' }, {    id: '1325asdfasdasd',    next: '5345341fgdfgdd',    previous: '545234123fsdfd' }, {    id: '5345341fgdfgdd',    next: '1j3b12k3jbasdd',    previous: '1325asdfasdasd' }, {    id: '1j3b12k3jbasdd',    next: '89ad8sasds9d8s',    previous: '5345341fgdfgdd' }, {    id: '89ad8sasds9d8s', previous: '1j3b12k3jbasdd' } ]