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

การแปลง Array of Objects เป็น Object of Arrays ใน JavaScript

สมมติเรามีอาร์เรย์ของออบเจกต์แบบนี้:

const nights = [
  { "2016-06-25": 32, "2016-06-26": 151, "2016-06-27": null },
  { "2016-06-24": null, "2016-06-25": null, "2016-06-26": null },
  { "2016-06-26": 11, "2016-06-27": 31, "2016-06-28": 31 },
];

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์แบบนี้และสร้างออบเจกต์ของอาร์เรย์โดยอิงจากคีย์ของออบเจกต์

ดังนั้น ผลลัพธ์สำหรับอาร์เรย์ข้างต้นควรเป็น:

const output = { "2016-06-24": [null], "2016-06-25": [32, null], "2016-06-26": [151, null, 11], "2016-06-27": [null, 31], "2016-06-28": [31] };

ตัวอย่างโค้ด

const nights = [
  { "2016-06-25": 32, "2016-06-26": 151, "2016-06-27": null },
  { "2016-06-24": null, "2016-06-25": null, "2016-06-26": null },
  { "2016-06-26": 11, "2016-06-27": 31, "2016-06-28": 31 },
];
const arrayToObject = (arr = []) => {
  const res = {};
  for(let i = 0; i < arr.length; i++){
    const keys = Object.keys(arr[i]);
    for(let j = 0; j < keys.length; j++){
      if(res.hasOwnProperty(keys[j])){
        res[keys[j]].push(arr[i][keys[j]]);
      }
      else{
        res[keys[j]] = [arr[i][keys[j]]];
      }
    }
  };
  return res;
};
console.log(arrayToObject(nights));

ผลลัพธ์

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

{
  '2016-06-25': [ 32, null ],
  '2016-06-26': [ 151, null, 11 ],
  '2016-06-27': [ null, 31 ],
  '2016-06-24': [ null ],
  '2016-06-28': [ 31 ]
}