@sul_evil

Как с помощью reduce и рекурсии получить уровни вложенности для всех вложенных объектов?

Не могу решить задачку с помощью reduce и рекурсии, предполагаю что моя проблема в неправильном return, есть идеи как это сделать правильно?
Суть проста, в каждом вложенном объекте, указать уровень его вложенности.

Я начал с этого:

const objectDepth = (obj) => {
  return Object.keys(obj).reduce((acum, item) => {
    if(typeof obj[item] === 'object'){
    } else {
    }
  }, {})
}

// Объект на вход
// Object { a: { d: { h: 4 }, e: 2 }, b: 1, c: { f: { g: 3, k: {} } } }

// Данные на выход
/*
 {
  a: { d: { h: 4, depth: 2 }, e: 2, depth: 1 },
  b: 1,
  c: { f: { g: 3, k: [Object], depth: 2 }, depth: 1 },
  depth: 0
}*/
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Функции добавить параметр - глубину вложенности.

Проверяем, чем является значение, если не объект, то возвращаем как есть. Иначе собираем новый объект, в который записываем текущую глубину вложенности и свойства исходного объекта, обработав их значения функцией - делаем рекурсивный вызов с глубиной вложенности, увеличенной на единицу:

const addDepth = (val, depth = 0) =>
  val instanceof Object
    ? Object.entries(val).reduce((acc, n) => (
        acc[n[0]] = addDepth(n[1], depth + 1),
        acc
      ), { depth })
    : val;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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