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 уже пустой.