Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ผสานคุณสมบัติของออบเจ็กต์ผ่านฟิลด์ที่ไม่ซ้ำกันแล้วพิมพ์ข้อมูล - JavaScript


สมมติว่าเรามีวัตถุของนักเรียนที่มีชื่อคุณสมบัติและเครื่องหมายสองรายการ 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' }
   ]
}