const getNestedItems = (data, test) =>
data instanceof Object
? Object.values(data).flatMap(n => getNestedItems(n, test))
: test(data) ? [ data ] : [];
const result = getNestedItems(obj, x => /^[A-Z]+$/.test(x)).join('');
или
function* getNestedItems(data, test) {
if (Object(data) === data) {
for (const k in data) if (Object.hasOwn(data, k)) {
yield* getNestedItems(data[k], test);
}
} else if (test(data)) {
yield data;
}
}
const result = ''.concat(...getNestedItems(obj, x => x?.toUpperCase?.() === x));