Рекурсия есть:
const findPath = (obj, val) =>
obj === val
? []
: Object.entries(obj instanceof Object ? obj : {}).reduce((found, n) => (
found || ((found = findPath(n[1], val)) && found.unshift(n[0])),
found
), null);
Рекурсии нет:
function findPath(obj, val) {
for (const stack = [ [ obj, [] ] ]; stack.length;) {
const [ n, keys ] = stack.pop();
if (Object.is(n, val)) {
return keys;
} else if (n instanceof Object) {
stack.push(...Object.entries(n).map(([ k, v ]) => [ v, [ ...keys, k ] ]));
}
}
return null;
}