Напишите код, который сделает из массива объект

Дан массив объектов:

const arr = [
  { name: "width", value: 10 },
  { name: "height", value: 20 },
];

Необходимо сделать из массива объект.

Примеры:

mapArrInObj([
  { name: "width", value: 10 },
  { name: "height", value: 20 }
]) --> { width: 10, height: 20 }
mapArrInObj([
    { name: "x", value: 100 },
    { name: "y", value: 200 }
]) --> { x: 100, y: 200 }
mapArrInObj([
    { name: "size", value: 0 },
    { name: "weight", value: 10 }
]) --> { size: 0, weight: 10 }

Теория по задаче

Преобразование «массив → объект» означает, что множество элементов объединяется в одну структуру, где доступ к данным идёт по ключу. В этой задаче каждый элемент массива описывает одно свойство: name — имя свойства, value — значение свойства. Поэтому базовая операция выглядит как присваивание по вычисляемому ключу: result[name] = value.

Почему работает Object.fromEntries

Object.fromEntries() создаёт объект из набора пар вида [ключ, значение]. Поэтому задача удобно решается через промежуточное представление в виде пар.

// 1) Преобразование элемента в пару:
{ name: "width", value: 10 }  ->  ["width", 10]

// 2) Сборка объекта из пар:
[ ["width", 10], ["height", 20] ]  ->  { width: 10, height: 20 }</code></pre>

Схема потока данных:

<pre><code>[ {name, value}, {name, value}, ... ]
          |
          | map: ({name,value}) => [name,value]
          v
[ [name, value], [name, value], ... ]
          |
          | Object.fromEntries
          v
{ [name]: value, [name]: value, ... }

Почему работает reduce

reduce() «сворачивает» массив к одному результату. В качестве результата удобно выбрать объект, а затем постепенно добавлять в него свойства.

Мини-схема итераций:

acc = {}
элемент 1: acc[name1] = value1  -> acc = { name1: value1 }
элемент 2: acc[name2] = value2  -> acc = { name1: value1, name2: value2 }
...

Важно понимать роль initialValue: когда оно равно {}, аккумулятор с первой итерации является объектом результата.

Как выбрать подход

Выбор обычно зависит от читаемости и необходимости дополнительных проверок.

ПодходКороткость кодаЧитаемость новичкуУдобство проверок
Object.fromEntries + mapВысокаяСредняяСредняя
reduceСредняяСредняяВысокая
for...ofНизкая/средняяВысокаяВысокая
Object.create(null)СредняяСредняяВысокая

Крайние случаи и типичные ошибки

  • Повтор ключей (name одинаковый): будет перезапись, поэтому сохранится значение из последнего элемента с таким name.
  • Пустой массив: корректным результатом является пустой объект {}.
  • Значения 0, false, "", null: это допустимые значения, они должны сохраняться без попыток «отфильтровать пустое».
  • Неожиданная форма элементов: если элемент без name или name не строка, уместно выбрасывать TypeError, чтобы ошибка обнаруживалась рядом с источником данных.
Проверка вида if (value) для этой задачи является типичной ошибкой, потому что 0 и "" являются корректными значениями, но считаются «ложными» в условиях.

Кратко: задача решается созданием объекта, где ключом становится name, а значением — value; удобные реализации: Object.fromEntries(arr.map(...)), arr.reduce(..., {}) или цикл for...of. Для надёжности полезно помнить про перезапись при одинаковых ключах и не отбрасывать значения вроде 0.