ภาพรวม
สมมติว่าเรามีอาร์เรย์ของอ็อบเจ็กต์:
const arr = [
{ "date": "2010-01-01", "price": 30 },
{ "date": "2010-02-01", "price": 40 },
{ "date": "2010-03-01", "price": 50 },
{ "date": "2010-01-01", "price2": 45 },
{ "date": "2010-05-01", "price2": 40 },
{ "date": "2010-10-01", "price2": 50 }
];
เราต้องเขียนฟังก์ชันที่รวมอ็อบเจ็กต์ตามคุณสมบัติ "date"
ตัวอย่างโค้ด
const arr = [
{ "date": "2010-01-01", "price": 30 },
{ "date": "2010-02-01", "price": 40 },
{ "date": "2010-03-01", "price": 50 },
{ "date": "2010-01-01", "price2": 45 },
{ "date": "2010-05-01", "price2": 40 },
{ "date": "2010-10-01", "price2": 50 }
];
const mergeArray = (arr = []) => {
const data = arr.slice();
data.sort((a, b) => new Date(a.date) - new Date(b.date));
const res = [];
data.forEach(el => {
if(!this[el.date]) {
this[el.date] = {
date: el.date,
price: null,
price2: null
};
res.push(this[el.date]);
}
this[el.date] = Object.assign(this[el.date], el);
});
return res;
};
console.log(JSON.stringify(mergeArray(arr), undefined, 4));
ผลลัพธ์ในคอนโซล
[
{ "date": "2010-01-01", "price": 30, "price2": 45 },
{ "date": "2010-02-01", "price": 40, "price2": null },
{ "date": "2010-03-01", "price": 50, "price2": null },
{ "date": "2010-05-01", "price": null, "price2": 40 },
{ "date": "2010-10-01", "price": null, "price2": 50 }
]