Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การรวมอาร์เรย์ JSON ตามวันที่ใน JavaScript


ภาพรวม

สมมติว่าเรามีอาร์เรย์ของอ็อบเจ็กต์:

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