riddlr
@riddlr

Почему reduce возвращает undefined?

Надо преобразовать массив в объект, где ключами будут айдишники

const array = [
  {id: '1', content: 'Some stuff'},
  {id: '2', content: 'Some other stuff'},
  {id: '3', content: 'Some another other stuff'}
]
const arrayToObject = (array) => {
  array.reduce((obj, item) => {
    obj[item._id] = item
    return obj
  }, {})
}
const newObject = arrayToObject(array)
console.log('newObject', newObject)


Возвращается undefined. Почему?
И как лучше решить задачу преобразования массива в такой объект?
  • Вопрос задан
  • 396 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const arrayToObject = (array) => {
  array.reduce(...

Надо добавить return или убрать фигурные скобки.

{id: '1', content: 'Some stuff'},

obj[item._id] = item

Почему в первом случае у id подчёркивания нет, а во втором есть? - ведь это один и тот же id, вроде как.

как лучше решить задачу преобразования массива в такой объект?

Давайте решим задачу в более общем виде, пусть ключами будут не обязательно id, а произвольные значения - добавим второй параметр, функцию, которая принимает элемент массива и возвращает ключ, под которым данный элемент будет записан в объект:

const arrToObj = (arr, key) => arr.reduce((acc, n) => (acc[key(n)] = n, acc), {});

const obj = arrToObj(arr, n => n.id);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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