[
{
"Info": [
{
"age": "26"
}
],
"Date": "2020-08-14"
},
{
"Info": [
{
"age": "23"
}
],
"Date": "2020-08-14"
},
{
"Info": [
{
"age": "30"
}
],
"Date": "2020-08-15"
}
][
{
"name": "2020-08-14",
"persons": [
{
"Info": [
{
"age": "26"
}
],
"Date": "2020-08-14"
},
{
"Info": [
{
"age": "23"
}
],
"Date": "2020-08-14"
}]
},
{
"name": "2020-08-15",
"persons": [
{
"Info": [
{
"age": "30"
}
],
"Date": "2020-08-15"
}
]
}
]
const result = Object.values(arr.reduce((acc, n) => (
(acc[n.Date] ??= { date: n.Date, persons: [] }).persons.push(n),
acc
), {}));function group(data, key, val = n => n) {
const getKey = key instanceof Function ? key : n => n[key];
const getVal = val instanceof Function ? val : n => n[val];
const result = new Map;
for (const n of data) {
const k = getKey(n);
result.set(k, result.get(k) ?? []).get(k).push(getVal(n));
}
return result;
}const result = Array.from(
group(arr, 'Date'),
([ date, persons ]) => ({ date, persons })
);