Giả sử, chúng ta có một mảng JavaScript như thế này -
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 ] } ];
Chúng tôi được yêu cầu viết một hàm JavaScript trong một mảng như vậy. Hàm phải tạo một mảng đối tượng được nhóm lại mới, dựa trên mảng ban đầu.
Mảng được nhóm phải chứa dữ liệu cho các đối tượng "tableName" riêng biệt, duy nhất thành các đối tượng của riêng chúng.
Do đó, cuối cùng, đầu ra sẽ giống như -
const output = [ { "tableName": "table1", "column": ["firstHeader", "secondHeader"], "rows": [["a","b","c"], ["d","e","f"]] }, { "tableName": "table2", "column": ["aNewFirstHeader"], "rows": [[1,2,3]] } ];
Ví dụ
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));
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
[ { "tableName": "table1", "column": [ "firstHeader", "secondHeader" ], "rows": [ [ "val", "b", "c" ], [ "d", "e", "f" ] ] }, { "tableName": "table2", "column": [ "aNewFirstHeader" ], "rows": [ [ 1, 2, 3 ] ] } ]