Вы можете скопировать объект с помощью Array#reduce()
и вернуть его Object.values()
:
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 map = data.reduce((acc, { name, date, value }) => {
if (!(name in acc)) {
acc[name] = { name, data: {} }
}
acc[name].data[date] = value
return acc
}, {})
const result = Object.values(map)
console.log(result)
Этот подход позволяет избежать использования Array#find()
, которая является сложностью по времени O (n), и использует name in acc
для проверки существования и acc[name]
для доступа, которые являются одновременно сложностью O (1), что делает это подход O (n) в целом.
Напротив, другой ответ - общая сложность времени O (n2).
Данные были потеряны. Символы, которые не поддерживает кодировка ANSI вашей системы, были преобразованы в ?
, и вы не можете отменить это. Там нет восстановления символов, которые были преобразованы в ?
.
Блокнот должен был предупредить вас о потере данных, прежде чем он позволил сохранить файл.