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