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

วิธีรวมอาร์เรย์ออบเจกต์สองชุดที่แตกต่างกันด้วย JavaScript


สมมติว่าเรามีอาร์เรย์ออบเจกต์สองชุดที่แตกต่างกันซึ่งมีข้อมูลเกี่ยวกับคำถามที่ผู้ตอบตอบไว้

const arr1=[ 
  { PersonalID: '11', qusetionNumber: '1', value: 'Something' }, 
  { PersonalID: '12', qusetionNumber: '2', value: 'whatever' }, 
  { PersonalID: '13', qusetionNumber: '3', value: 'anything' }, 
  { PersonalID: '14', qusetionNumber: '4', value: 'null' } 
]; 
const arr2=[ 
  { qusetionNumber: '2', chID: '111', cValue: 'red' }, 
  { qusetionNumber: '2', chID: '112', cValue: 'green'}, 
  { qusetionNumber: '2', chID: '113', cValue: 'blue' }, 
  {qusetionNumber: '3', choiceID: '114', cValue: 'yellow'}, 
  {qusetionNumber: '4', choiceID: '115', cValue: 'red'} 
];

เราต้องเขียนฟังก์ชันที่จัดกลุ่มข้อมูลในทั้งสองอาร์เรย์ตามบุคคลที่ไม่ซ้ำกัน กล่าวคือ ออบเจกต์หนึ่งต่อบุคคลหนึ่งที่แสดงคำถามและตัวเลือกสำหรับแต่ละบุคคล

ดังนั้น ผลลัพธ์สุดท้ายควรเป็นดังนี้

const output = [{ 
  personalID:11, 
  qusetionNumber:1, 
  value: 'Something' 
}, { 
  personalID:12, 
  qusetionNumber:2, 
  value: 'whatever', 
  choice:[ 
    { qusetionNumber: '2', chID: '111', cValue: 'red' }, 
    { qusetionNumber: '2', chID: '112', cValue: 'green'}, 
    { qusetionNumber: '2', chID: '113', cValue: 'blue' } 
  ] 
}, { 
  personalID:13, 
  qusetionNumber:3, 
  value: 'anything', 
  choice:[ 
    { qusetionNumber: '3', chID: '114', cValue: 'yellow' } 
  ] 
}, { 
  personalID:14, 
  qusetionNumber:4, 
  value: 'null', 
  choice:[ 
    { qusetionNumber: '4', chID: '115', cValue: 'red' } 
  ] 
}];

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

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

const arr1=[ 
  { PersonalID: '11', qusetionNumber: '1', value: 'Something' }, 
  { PersonalID: '12', qusetionNumber: '2', value: 'whatever' }, 
  { PersonalID: '13', qusetionNumber: '3', value: 'anything' }, 
  { PersonalID: '14', qusetionNumber: '4', value: 'null' } 
]; 
const arr2=[ 
  { qusetionNumber: '2', chID: '111', cValue: 'red' }, 
  { qusetionNumber: '2', chID: '112', cValue: 'green'}, 
  { qusetionNumber: '2', chID: '113', cValue: 'blue' }, 
  {qusetionNumber: '3', choiceID: '114', cValue: 'yellow'}, 
  {qusetionNumber: '4', choiceID: '115', cValue: 'red'} 
]; 
const mergeArray = (arr1 = [], arr2 = []) => { 
  let i = -1; 
  const copy = arr1.slice(); 
  copy.forEach(obj => { 
    const helper = []; 
    arr2.forEach(obj2 => { 
      if(obj.qusetionNumber == obj2.qusetionNumber){ 
        i++; 
        helper.push(arr2[i]); 
      }; 
    }) 
    if(helper.length !== 0){ 
      obj.choice = helper; 
    }; 
  }) 
  return copy; 
}; 
console.log(JSON.stringify(mergeArray(arr1, arr2), undefined, 4));

ผลลัพธ์

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

[ 
  { 
    "PersonalID": "11", 
    "qusetionNumber": "1", 
    "value": "Something" 
  }, 
  { 
    "PersonalID": "12", 
    "qusetionNumber": "2", 
    "value": "whatever", 
    "choice": [ 
      { 
        "qusetionNumber": "2", 
        "chID": "111", 
        "cValue": "red" 
      }, 
      { 
        "qusetionNumber": "2", 
        "chID": "112", 
        "cValue": "green" 
      }, 
      { 
        "qusetionNumber": "2", 
        "chID": "113", 
        "cValue": "blue" 
      } 
    ] 
  }, 
  { 
    "PersonalID": "13", 
    "qusetionNumber": "3", 
    "value": "anything", 
    "choice": [ 
      { 
        "qusetionNumber": "3", 
        "choiceID": "114", 
        "cValue": "yellow" 
      } 
    ] 
  }, 
  { 
    "PersonalID": "14", 
    "qusetionNumber": "4", 
    "value": "null", 
    "choice": [ 
      { 
        "qusetionNumber": "4", 
        "choiceID": "115", 
        "cValue": "red" 
      } 
    ] 
  } 
]