Задать вопрос
@iharaleynikov

Как рекурсивно обойти древовидный объект?

Допустим, что есть объект древовидной структуры:

const obj = {
  something: {
    something1: 'value',
    something2: 'value1',
    something3: {
      something4: 'value2'
    }
  }
};

Я хочу рекурсивно пройтись по нему и получить, например, только ключи объекта. Как это сделать? Помогите пожалуйста.
  • Вопрос задан
  • 233 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
VlasenkoFedor
@VlasenkoFedor
Программист: php, js, go
const obj = {
  something: {
    something1: 'value',
    something2: 'value1',
    something3: {
      something4: 'value2'
    }
  }
}
const getKeys = obj => {
  const res = []
  for (const key in obj) {
    res.push(key)
    obj[key] && Object.getPrototypeOf(obj[key]) === Object.prototype && res.push(...getKeys(obj[key]))
  }
  return res
}
console.log(getKeys(obj))
//[ 'something', 'something1', 'something2', 'something3', 'something4' ]

Вариант
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
const getKeys = obj =>
  obj instanceof Object
    ? Object.entries(obj).flatMap(n => [ n[0], ...getKeys(n[1]) ])
    : [];


const keys = getKeys(obj);

или

function* getKeys(obj) {
  if (Object(obj) === obj) {
    for (const k in obj) if (obj.hasOwnProperty(k)) {
      yield k;
      yield* getKeys(obj[k]);
    }
  }
}


const keys = Array.from(getKeys(obj));
// или
for (const n of getKeys(obj)) {
  console.log(n);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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