@dGololobov
начинающий

Как объединить по свойствам массив объектов?

Есть массив объектов вида:
let persons = [
    {'ID': 123, 'FIELD': 'NAME', 'VALUE': 'Вася'},
    {'ID': 123, 'FIELD': 'LAST_NAME', 'VALUE': 'Петров'},
    {'ID': 234, 'FIELD': 'NAME', 'VALUE': 'Петя'},
    {'ID': 234, 'FIELD': 'LAST_NAME', 'VALUE': 'Семенов'},
    {'ID': 234, 'FIELD': 'PHONE', 'VALUE': '123456'},
    {'ID': 432, 'FIELD': 'NAME', 'VALUE': 'Сережа'},
    {'ID': 432, 'FIELD': 'PHONE', 'VALUE': '46582934'},
]

Т.е. свойство FIELD может иметь разные значения.
Нужна функция для преобразования его в массив вида:
let finalPersons = [
    {'ID': 123, 'NAME': 'Вася', 'LAST_NAME': 'Петров', },
    {'ID': 234, 'NAME': 'Петя', 'LAST_NAME': 'Семенов', 'PHONE': '123456'},
    {'ID': 432, 'NAME': 'Сережа', 'PHONE': '46582934'},
]
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const result = Object.values(arr.reduce((acc, n) => (
  (acc[n.ID] = acc[n.ID] || { ID: n.ID })[n.FIELD] = n.VALUE,
  acc
), {}));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы