Как можно объединить значения в массиве в группы?

Как конвертировать массив `const array = ['part1-item1', 'part1-item2', 'part2-item1', 'part3-item1']` в объект следующего формата: <br/> <pre><code>{
  part1: ['item1', 'item2'],
  part2: ['item1'],
  part3: ['item1']
}</code></pre> ? В случае отсутствия ключа с названием 'part' в объекте, необходимо создать его и инициализировать как массив, а если ключ уже существует, то следует добавить новый элемент 'item' в уже существующий массив. Я начал реализацию с использования метода `reduce`, вот мой текущий код: <br/> <pre><code>arr.reduce((acc, rec) =&gt; {
  const [devId, paramId] = rec.split('-')
  if (!acc[devId]) {
    return {...acc, [devId]: [paramId]}
  } else {
    
  }
}, {})
&lt;code&gt;</code></pre>
  • 15 ноября 2024 г. 10:53
Ответы на вопрос 2
Ваш подход с использованием метода `reduce` - это отличная идея для этой задачи. Давайте завершим ваш код, чтобы он правильно группировал значения в объекте. Вот как это можно сделать:

```javascript
const array = ['part1-item1', 'part1-item2', 'part2-item1', 'part3-item1'];

const groupedObject = array.reduce((acc, rec) => {
  const [key, value] = rec.split('-');

  // Проверяем, существует ли ключ в объекте
  if (!acc[key]) {
    // Если нет, создаем ключ и инициализируем его массивом с текущим значением
    acc[key] = [value];
  } else {
    // Если существует, просто добавляем новое значение в существующий массив
    acc[key].push(value);
  }

  return acc;  // Возвращаем аккумулятор для следующей итерации
}, {});

console.log(groupedObject);
```

### Как это работает:
1. Метод `reduce` инициализируется с пустым объектом `{}` в качестве аккумулятора `acc`.
2. Каждая строка из массива разбивается на две части с помощью `split('-')`: первая часть становится ключом (`key`), а вторая - значением (`value`).
3. Если объект `acc` не содержит текущий ключ (`key`), создаем этот ключ и инициализируем его массивом, который содержит текущий элемент (`value`).
4. Если ключ уже существует, просто добавляем новое значение в уже существующий массив с помощью метода `push`.
5. В конце `reduce` возвращает объект с нужным форматом.

### Результат:
После выполнения кода у вас получится объект следующего вида:
```javascript
{
  part1: ['item1', 'item2'],
  part2: ['item1'],
  part3: ['item1']
}
```

Такой подход позволяет элегантно группировать значения и минимизирует количество условных проверок.
const array = ['part1-item1', 'part1-item2', 'part2-item1', 'part3-item1'];

const result = array.reduce((acc, rec) => {
  const [part, item] = rec.split('-');
  if (!acc[part]) {
    acc[part] = [item];
  } else {
    acc[part].push(item);
  }
  return acc;
}, {});
Похожие вопросы