@mraser

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

const obj = {'a': {'b': 1, 'c': 2, 'd': {...}, ...}, ....};

const keys = find(obj, 1); // ['a', 'b']
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия есть:

const findPath = (obj, val) =>
  Object.is(obj, val)
    ? []
    : Object.entries(obj instanceof Object ? obj : {}).reduce((found, n) => {
        if (!found) {
          found = findPath(n[1], val);
          if (found) {
            found.unshift(n[0]);
          }
        }

        return found;
      }, null);

Рекурсии нет:

function findPath(obj, val) {
  for (const stack = [ [ obj, [] ] ]; stack.length; ) {
    const [ n, keys ] = stack.pop();

    if (Object.is(n, val)) {
      return keys;
    }

    if (n instanceof Object) {
      stack.push(...Object.entries(n).reverse().map(([ k, v ]) => [ v, [ ...keys, k ] ]));
    }
  }

  return null;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Seasle
@Seasle Куратор тега JavaScript
А есть попытки это сделать? На задание больше смахивает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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