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

รวมอาร์เรย์ออบเจกต์ใน JavaScript


สมมติว่าเรามีอาร์เรย์ของออบเจกต์ที่มีข้อมูลนักเรียนดังนี้

const arr = [{ 
  name: 'A', 
  idNo: 1, 
  marks: { 
    math: 98, 
    sci: 97, 
    eng: 89 
  } 
}, { 
  name: 'B', 
  idNo: 2, 
  marks: { 
    math: 88, 
    sci: 87, 
    eng: 79 
  } 
}, { 
  name: 'C', 
  idNo: 3, 
  marks: { 
    math: 87, 
    sci: 98, 
    eng: 91 
  } 
}];

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ดังกล่าว

ฟังก์ชันควรเตรียมออบเจกต์ของ properties โดยมี property หนึ่งสำหรับแต่ละ property ที่ออบเจกต์มีอยู่

ดังนั้น สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรเป็นดังนี้

const output = { 
  name: [A, B, C], 
  idNo: [1, 2, 3], 
  marks: [{ 
    math: 98, 
    sci: 97, 
    eng: 89 
  }, 
  { 
    math: 88, 
    sci: 87, 
    eng: 79 
  }, 
  { 
    math: 87, 
    sci: 98, 
    eng: 91 
  }] 
};

ตัวอย่างโค้ด

โค้ดสำหรับการทำงานนี้จะเป็นดังนี้

const arr = [{ 
  name: 'A', 
  idNo: 1, 
  marks: { 
    math: 98, 
    sci: 97, 
    eng: 89 
  } 
}, { 
  name: 'B', 
  idNo: 2, 
  marks: { 
    math: 88, 
    sci: 87, 
    eng: 79 
  } 
}, { 
  name: 'C', 
  idNo: 3, 
  marks: { 
    math: 87, 
    sci: 98, 
    eng: 91 
  } 
}]; 
const combineMarks = (arr = []) => { 
  let res = []; 
  res = arr.reduce((acc, val) => { 
    Object.keys(val).forEach(el => { 
      if (!acc[el]) { 
        acc[el] = []; 
      }; 
      acc[el].push(val[el]) 
    }); 
    return acc; 
  }, {}); 
  return res; 
}; 
console.log(combineMarks(arr));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้

{
  name: [ 'A', 'B', 'C' ], 
  idNo: [ 1, 2, 3 ], 
  marks: [ 
    { math: 98, sci: 97, eng: 89 }, 
    { math: 88, sci: 87, eng: 79 }, 
    { math: 87, sci: 98, eng: 91 } 
  ] 
}