let obj = {
a: 'f',
b: 78,
c: 'R',
d: {
a: {
a: null,
b: 'E',
c: {
a: true,
b: 'C',
c: 'test'
},
d: 'U'
},
b: {
a: 'R',
b: ['S', 4, 6, 'I'],
c: 0,
},
c: ['O'],
d: null,
e: 'N'
}
}
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));