สมมติว่าเรามีวัตถุของนักเรียนที่มีชื่อคุณสมบัติและเครื่องหมายสองรายการ Namesis เป็นอาร์เรย์ของอ็อบเจ็กต์โดยแต่ละอ็อบเจ็กต์มีชื่อคุณสมบัติสองชื่อและม้วน ในทำนองเดียวกันเครื่องหมายคืออาร์เรย์ของอ็อบเจ็กต์โดยแต่ละอ็อบเจ็กต์มีคุณสมบัติมาร์คและม้วน งานของเราคือการรวมคุณสมบัติเครื่องหมายและชื่อตามคุณสมบัติม้วนที่เหมาะสมของแต่ละวัตถุ
นักเรียน วัตถุได้รับที่นี่ -
const students = { marks: [{ roll: 123, mark: 89 }, { roll: 143, mark: 69 }, { roll: 126, mark: 91 }, { roll: 112, mark: 80 }], names: [{ name: 'Aashish', roll: 126 }, { name: 'Sourav', roll: 112 }, { name: 'Vineet', roll: 143 }, { name: 'Kartik', roll: 123 }] }
มากำหนดฟังก์ชันที่ combineProperties ที่รับวัตถุของนักเรียนและรวมคุณสมบัติดังกล่าวเข้าที่โดยไม่ต้องใช้พื้นที่เพิ่มเติม -
const combineProperties = (students) => { const { marks, names } = students; marks.forEach(marksObj => { const { roll } = marksObj; marksObj.name = names.find(namesObj => namesObj.roll ===roll).name; }) delete students['names']; }; combineProperties(students); console.log(students);
ความซับซ้อนของเวลาของรหัสนี้คือ O(mn) โดยที่ m และ n คือขนาดตามลำดับของชื่อและเครื่องหมายของอาร์เรย์ และความซับซ้อนของช่องว่างของ O(1) นี้ อย่างไรก็ตาม กำลังสร้างคุณสมบัติใหม่สำหรับแต่ละองค์ประกอบของอาร์เรย์เครื่องหมาย
นี่คือรหัสที่สมบูรณ์ -
ตัวอย่าง
const students = { marks: [{ roll: 123, mark: 89 }, { roll: 143, mark: 69 }, { roll: 126, mark: 91 }, { roll: 112, mark: 80 }], names: [{ name: 'Aashish', roll: 126 }, { name: 'Sourav', roll: 112 }, { name: 'Vineet', roll: 143 }, { name: 'Kartik', roll: 123 }] } const combineProperties = (students) => { const { marks, names } = students; marks.forEach(marksObj => { const { roll } = marksObj; marksObj.name = names.find(namesObj => namesObj.roll ===roll).name; }) delete students['names']; }; combineProperties(students); console.log(students);
ผลลัพธ์
เอาต์พุตคอนโซลจะเป็น −
{ marks: [ { roll: 123, mark: 89, name: 'Kartik' },{ roll: 143, mark: 69, name: 'Vineet' }, { roll: 126, mark: 91, name: 'Aashish' },{ roll: 112, mark: 80, name: 'Sourav' } ] }