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

จัดกลุ่มข้อมูลเป็นรายเดือนใน JavaScript

สมมติว่ามีข้อมูลเกี่ยวกับผู้ใช้บางคนดังนี้:

const obj = {
  "Mary": {
    "2016-1": 2,
    "2016-5": 1,
    "2016-3": 1
  },
  "Paul": {
    "2016-1": 1,
    "2016-3": 1
  },
  "moth": {
    "2016-1": 2,
    "2016-5": 1
  }
};

เราต้องเขียนฟังก์ชัน JavaScript ที่รับออบเจ็กต์ดังกล่าว ฟังก์ชันควรจัดกลุ่มข้อมูลผู้ใช้นี้เป็นออบเจ็กต์ที่แต่ละวันที่ไม่ซ้ำกันแทนด้วยออบเจ็กต์

ตัวอย่าง

โค้ดสำหรับนี้จะเป็นดังนี้:

const obj = {
  "Mary": {
    "2016-1": 2,
    "2016-5": 1,
    "2016-3": 1
  },
  "Paul": {
    "2016-1": 1,
    "2016-3": 1
  },
  "moth": {
    "2016-1": 2,
    "2016-5": 1
  }
};

const groupByDate = (obj = {}) => {
  const names = Object.keys(obj);
  const res = {};
  for(let i = 0; i < names.length; i++){
    const name = names[i];
    const dates = Object.keys(obj[name]);
    for(let j = 0; j < dates.length; j++){
      const date = dates[j];
      if(!res.hasOwnProperty(date)){
        res[date] = {
          names: [name],
          values: [obj[name][date]]
        }
      }
      else{
        res[date].names.push(name);
        res[date].values.push(obj[name][date]);
      };
    };
  };
  return res;
};

console.log(groupByDate(obj));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้:

{
  '2016-1': { names: [ 'Mary', 'Paul', 'moth' ], values: [ 2, 1, 2 ] },
  '2016-5': { names: [ 'Mary', 'moth' ], values: [ 1, 1 ] },
  '2016-3': { names: [ 'Mary', 'Paul' ], values: [ 1, 1 ] }
}