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

แปลงข้อมูลตาราง 2D เป็นอาร์เรย์ของออบเจ็กต์ใน JavaScript

สมมติว่ามีอาร์เรย์ของอาร์เรย์ดังนี้:

const arr = [
  ["Ashley", "2017-01-10", 80],
  ["Ashley", "2017-02-10", 75],
  ["Ashley", "2017-03-10", 85],
  ["Clara", "2017-01-10", 90],
  ["Clara", "2017-02-10", 82]
];

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ดังกล่าวเป็นอินพุตเดียว ฟังก์ชันควรสร้างอาร์เรย์ของออบเจ็กต์ใหม่โดยอิงจากอาร์เรย์อินพุท อาร์เรย์ควรมีออบเจ็กต์สำหรับแต่ละซับอาร์เรย์ที่ไม่ซ้ำกัน (โดย "ไม่ซ้ำ" ในบริบทนี้หมายถึงซับอาร์เรย์ที่มีองค์ประกอบแรกไม่ซ้ำกัน)

แต่ละออบเจ็กต์ต้องมีโครงสร้างดังนี้:

const output = [
  {"name": "Ashley", "2017-01-10": 80, "2017-02-10": 75, "2017-03-10": 85},
  {"name": "Clara", "2017-01-10": 90, "2017-02-10": 82}
];

ตัวอย่าง

const arr = [
  ["Ashley", "2017-01-10", 80],
  ["Ashley", "2017-02-10", 75],
  ["Ashley", "2017-03-10", 85],
  ["Clara", "2017-01-10", 90],
  ["Clara", "2017-02-10", 82]
];

const groupArray = (arr = []) => {
  let grouped = [];
  grouped = arr.reduce(function (hash) {
    return function (r, a) {
      if (!hash[a[0]]) {
        hash[a[0]] = { name: a[0] };
        r.push(hash[a[0]]);
      }
      hash[a[0]][a[1]] = a[2];
      return r;
    };
  }(Object.create(null)), []);
  return grouped;
};

console.log(groupArray(arr));

ผลลัพธ์

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

[
  { name: 'Ashley', '2017-01-10': 80, '2017-02-10': 75, '2017-03-10': 85 },
  { name: 'Clara', '2017-01-10': 90, '2017-02-10': 82 }
]