Задать вопрос
@RuslanTimuziyev
Немного кодер

Как решить проблему в обходе дерева (не сохраняет значение)?

function queryString(obj, nodePath, hist) {
  nodePath = nodePath || '';
  hist = hist || '';
  Object.keys(obj).forEach(k => {
    if (typeof obj[k] == 'object' && obj[k] !== null) {
      // console.log('obj', k);
      nodePath += '{}==' + k;
      queryString(obj[k], nodePath, hist);    
    } else {
      hist += nodePath;
      hist += '{}!=' + k;
    }
  });
  return hist;
}

Структура для примера:
{
  a: {
    b: {
      c: {
        e: 'hello'
      },
      d: 'aloha'
    }
  }
}


Функция queryString представляет собой рекурсию, которая обходит дерево и создает строку. Параметр obj принимает структуру выше. Функция должна вернуть аргумент hist, который запланирован выглядеть так:
'{}==a{}==b{}==c{}!=e' + '{}==a{}==b{}!=d' // разделил для удобочитаемости

nodePath нужен лишь для запоминания путей объектов/ветвей.
Так вот вопрос:
В первое срабатывание else, hist должен равняться '{}==a{}==b{}==c{}!=e' (если вывести hist в этом месте, то так оно и есть). Однако, когда мы итерируемся дальше по циклу и попадаем в if - hist уже пустой.
  • Вопрос задан
  • 235 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Так вы нигде в рекурсии не используете значение hist, которое возвращает функция queryString.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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