Вы можете написать общую c groupBy
функцию, которая будет объединять объекты по полям. Пример:
const data = [
{
"date": "2020-07-14",
"finishTime": "22:00",
"startTime": "13:30",
},
{
"date": "2020-07-14",
"finishTime": "12:00",
"startTime": "08:00",
}
];
function groupBy(array, property) {
const temp = {};
for (const item of array) {
const propValue = item[property];
if (!temp.hasOwnProperty(propValue)) {
temp[propValue] = {
[property]: propValue
};
}
for (const [key, value] of Object.entries(item)) {
if (key === property) continue;
temp[propValue][key] = (temp[propValue][key] || []).concat(value);
}
}
return Object.values(temp);
}
console.dir(groupBy(data, 'date'));
Вывод:
[
{
date: "2020-07-14",
finishTime: ["22:00", "12:00"],
startTime: ["13:30", "08:00"],
}
]
В моем примере используется синтаксис ES6
, если вам нужно, вы можете легко преобразовать этот код в ES5
. Также мой код написан в императивном стиле, при необходимости его можно переписать с использованием reduce
и forEach
.