Computer >> Máy Tính >  >> Lập trình >> Javascript

Làm cách nào để hợp nhất hai mảng đối tượng khác nhau bằng JavaScript?

Giả sử, chúng ta có hai mảng đối tượng khác nhau chứa thông tin về các câu hỏi được trả lời bởi một số người -

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'}
];

Chúng tôi được yêu cầu viết một hàm nhóm dữ liệu này, hiển thị trong cả hai mảng theo những người duy nhất, tức là một đối tượng mô tả câu hỏi và lựa chọn cho từng người duy nhất.

Do đó, kết quả cuối cùng sẽ trông giống như thế này -

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' }
   ]
}];

Ví dụ

Mã cho điều này sẽ là -

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));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

[
   {
      "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"
         }
      ]
   }
]