Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Cách 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 ta cần viết một hàm gom nhóm dữ liệu từ cả hai mảng theo từ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 mỗi người.

Do đó, đầu ra cuối cùng sẽ trông như sau:

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ã thực hiện:

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

Kết quả

Kết quả trong console:

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