Я бы использовал следующий подход, основанный на методах reduce
и find
(ES6):
const data = [
{ name: 'xx1', date: '2017-09-03', value: 49 },
{ name: 'xx2', date: '2017-10-23', value: 67 },
{ name: 'xx2', date: '2017-12-01', value: 70 }
];
const result = data.reduce((acc, item) => {
const found = acc.find(a => a.name === item.name);
if (found) {
found.data[item.date] = item.value;
} else {
acc.push({
name: item.name,
data: {
[item.date]: item.value
}
});
}
return acc;
}, []);
Если вы не хотите ES6, оба метода имеют версии lodash
: уменьшить , найти .