Giả sử, chúng ta có một mảng các mảng như thế này -
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] ];
Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng như vậy làm đầu vào đầu tiên và duy nhất.
Sau đó, hàm sẽ tạo một mảng đối tượng mới dựa trên mảng đầu vào. Mảng phải chứa một đối tượng cho mỗi mảng con duy nhất của mảng đầu vào. (bởi duy nhất, trong ngữ cảnh này, chúng tôi muốn nói đến mảng con có phần tử đầu tiên là duy nhất).
Mỗi đối tượng phải có lược đồ sau -
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} ];
Ví dụ
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));
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
[ { name: 'Ashley', '2017-01-10': 80, '2017-02-10': 75, '2017-03-10': 85 }, { name: 'Clara', '2017-01-10': 90, '2017-02-10': 82 } ]