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

จัดกลุ่มอาร์เรย์ JavaScript

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

const data = [
  {
    "dataId": "1",
    "tableName": "table1",
    "column": "firstHeader",
    "rows": [ "a","b","c" ]
  },
  {
    "dataId": "2",
    "tableName": "table1",
    "column": "secondHeader",
    "rows": [ "d","e","f" ]
  },
  {
    "dataId": "3",
    "tableName": "table2",
    "column": "aNewFirstHeader",
    "rows": [ 1,2,3 ]
  }
];

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

อาร์เรย์ที่จัดกลุ่มควรมีข้อมูลสำหรับออบเจ็กต์ "tableName" ที่ไม่ซ้ำกันแยกเป็นออบเจ็กต์ของตัวเอง

ดังนั้น ผลลัพธ์สุดท้ายควรเป็นดังนี้:

const output = [
  {
    "tableName": "table1",
    "column": ["firstHeader", "secondHeader"],
    "rows": [["a","b","c"], ["d","e","f"]]
  },
  {
    "tableName": "table2",
    "column": ["aNewFirstHeader"],
    "rows": [[1,2,3]]
  }
];

ตัวอย่าง

const arr = [
  {
    "dataId": "1",
    "tableName": "table1",
    "column": "firstHeader",
    "rows": [ "val","b","c" ]
  },
  {
    "dataId": "2",
    "tableName": "table1",
    "column": "secondHeader",
    "rows": [ "d","e","f" ]
  },
  {
    "dataId": "3",
    "tableName": "table2",
    "column": "aNewFirstHeader",
    "rows": [ 1,2,3 ]
  }
];

const groupArray = (arr = []) => {
  const res = arr.reduce((obj => (acc, val) => {
    let item = obj.get(val.tableName);
    if (!item) {
      item = {
        tableName: val.tableName, column: [], rows: []
      }
      obj.set(val.tableName, item); acc.push(item);
    };
    item.column.push(val.column); item.rows.push(val.rows);
    return acc;
  })(new Map), []);
  return res;
};

console.log(JSON.stringify(groupArray(arr), undefined, 4));

ผลลัพธ์

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

[
  {
    "tableName": "table1",
    "column": [
      "firstHeader",
      "secondHeader"
    ],
    "rows": [
      [ "val", "b", "c" ],
      [ "d", "e", "f" ]
    ]
  },
  {
    "tableName": "table2",
    "column": [ "aNewFirstHeader" ],
    "rows": [ [ 1, 2, 3 ] ]
  }
]