Задать вопрос
@The_Last_Dot

Как можно коротко перебрать массив объектов и преобразовать по одинаковому id при помощи javascript?

есть массив объектов
const data = [
  {id: 1, color: red},
  {id: 1, color: black},
  {id: 2, color: green},
  {id: 3, color: white},
  {id: 3, color: blue}
  ...
]


как можно коротко преобразовать данный массив при помощи javascript в вид
const data = [
  {id: 1, colors: [red, black]},
  {id: 2, color: green},
  {id: 3, color: [white, blue]},
]
  • Вопрос задан
  • 184 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Вот коротко:

const result = Object.values(data.reduce((acc, { id, color }) => (
  (acc[id] ??= { id, colors: [] }).colors.push(color),
  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(data, 'id', 'color'),
  ([ id, colors ]) => ({ id, colors })
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы