두 개의 배열이 있다고 가정합니다. 첫 번째 배열에는 일부 이벤트의 예정된 날짜가 포함되고 두 번째 배열에는 다음과 같이 해당 이벤트의 이름이 포함됩니다.
const dates = [
{
id:"1",
date:"2017-11-07"
},
{
id:"1",
date:"2017-11-08"
},
{
id:"2",
date:"2017-11-07"
},
{
id:"2",
date:"2017-11-08"
}
];
const names = [
{
id:"1",
name:"Pervies, Peter"
},
{
id:"2",
name:"Ming, Edmund"
}
]; 이러한 두 개의 배열을 취하고 id 속성을 기반으로 해당 날짜와 이벤트 이름을 결합하는 JavaScript 함수를 작성해야 합니다.
따라서 이러한 배열의 경우 출력은 다음과 같아야 합니다. -
const output = [
{
id:"1",
name:"Pervies, Peter",
details:[
{date:"2017-11-07"},
{date:"2017-11-08"}
]
},
{
id:"2",
name:"Ming, Edmund",
details:[
{date:"2017-11-07"},
{date:"2017-11-08"}
]
}
] 예시
이에 대한 코드는 -
const dates = [
{
id:"1",
date:"2017-11-07"
},
{
id:"1",
date:"2017-11-08"
},
{
id:"2",
date:"2017-11-07"
},
{
id:"2",
date:"2017-11-08"
}
];
const names = [
{
id:"1",
name:"Pervies, Peter"
},
{
id:"2",
name:"Ming, Edmund"
}
];
const combineArrays = (dates, names) => {
const res = [];
dates.forEach(el => {
const bool = !res.some(item => {
return item.id == el.id;
});
if(bool){
let combined = {};
combined.id = el.id;
combined.details = combined.details || [];
combined.details.push({
"date": el.date
});
res.push(combined);
}else{
res.find(item => {
return item.id === el.id;
})
.details.push({
"date": el.date
});
};
});
res.forEach(el => {
const bool = names.some(item => {
return item.id === el.id;
});
if(bool){
el.name = names.find(name => {
return name.id === el.id;
}).name;
};
});
return res;
};
console.log(JSON.stringify(combineArrays(dates, names), undefined, 4)); 출력
콘솔의 출력 -
[
{
"id": "1",
"details": [
{
"date": "2017-11-07"
},
{
"date": "2017-11-08"
}
],
"name": "Pervies, Peter"
},
{
"id": "2",
"details": [
{
"date": "2017-11-07"
},
{
"date": "2017-11-08"
}
],
"name": "Ming, Edmund"
}
]