logicface
@logicface
Начинающий

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

Всем привет. Я учусь рекурсии и мне она очень трудно дается. Добраться до каких-то значений во вложенном дереве или делать какие-то простые вещи вроде факториалов я могу. Но когда нужно создать что-то результирующее из этих значений используя объявленные переменные внутри рекурсии, то я не понимаю как это реализовать. Например:
let users = {
  user1: {
    name: 'Mike',
  },
  user2: {
    name: 'Tom',
    user3: {
      name: 'David',
    },
  },
}

let result = []

function recur(obj) {
  for (let key in obj) {
    if (typeof obj[key] !== 'object') {
      result.push(obj[key])
    } else recur(obj[key])
  }
  return result
}

console.log(recur(users)) // Результирующий, но конечная переменная вне рекурсии
console.log(result) // Результирующий массив

Как это переписать таким образом, чтобы let result = [] не находилось вне рекурсии? То есть чтобы рекурсия сама создавала результирующую переменную и в итоге отдавала ее.
  • Вопрос задан
  • 127 просмотров
Решения вопроса 2
Alexandroppolus
@Alexandroppolus
кодир
как вариант:

function recur(obj, result = []) {
  for (let key in obj) {
    if (typeof obj[key] !== 'object' || obj[key] === null) {
      result.push(obj[key])
    } else recur(obj[key], result)
  }
  return result
}
Ответ написан
hahenty
@hahenty
('•')
function recur( obj ) {
  if( typeof obj !== 'object' ) return obj;
  return Object.values( obj ).map( v => recur(v) ).flat()
}

let result = recur( users );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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