@beefront17

Как превратить массив в объект, js?

Добрый день! Подскажите пожалуйста как превратить массив в объект?
Почему не работает такой код?
const toObj = (arr) => {
  let obj = {};
  return arr.forEach((e) => {
   obj = { ...e };
  });
};


Сам массив типа такого
const arr = [
{test: []}
{test2: []}
...
]


нужно такое
const arr = {
test: []
test2: []
...
}

Почему не работает spread operator?

Спасибо!
  • Вопрос задан
  • 4005 просмотров
Решения вопроса 2
3Lvcz
@3Lvcz
Фронтенд разработчик
Дело в том, что в каждой итерации внутри forEach ты перезаписываешь объект obj полностью (а не расширяешь/дополняешь его), так что в последней итерации в объекте obj будут только те св-ва/значения, которые были у последнего элемента массива. Лучше так:
const toObj = (arr) => arr.reduce((a, b) => ({ ...a, ...b }));
Ответ написан
rockon404
@rockon404
Frontend Developer
Потому что вы неправильно его используете. Попробуйте так:
const obj = arr.reduce((acc, el) => ({ ...acc, ...el }), {});

Ваш вариант в исправленном виде:
const toObj = arr => {
  let obj = {};

  arr.forEach(el => {
   obj = { ...obj, ...el };
  });

  return obj;
};
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@SinGlEBW
Вот тут оставлю мало ли кому приходиться. Через reduce сложновато для понимания.
const arr = [
    { test: [1] },
    { test2: [2] },
  ];
let obj = {};
arr.forEach((el) => {
    Object.assign(obj,el);
});

console.dir(obj);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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