Как в JS используя рекурсию сконкатенировать только заглавные буквы в слово?

Необходимо используя рекурсию сконкатенировать только заглавные буквы в слово. Как можно проще, из без затрагивания prototype и т.д

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'
 }
}

Ответы (2 шт):

Автор решения: Nikita

Вот готовый код:

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'
 }
}

function f(o){
    let r = '';
    for(let i in o){
        let e = o[i];
        if(typeof e == 'object') r += f(e);
        if(typeof e == 'string' && e.toUpperCase() == e) r += e;
    }
    return r;
}

let str = f(obj);
→ Ссылка
Автор решения: IvaMuxa

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'
  }
}

function checkUpperLetters(v) {
  let result = "";
  switch (typeof v) {
    case "object":
      for (var a in v) result += checkUpperLetters(v[a]);
      break;
    case "string":
      if (v.length === 1 &&
        v === v.toUpperCase() &&
        v !== v.toLowerCase()) {
        result += v;
      }
      break;
    default:
  }
  return result;
}

console.log(checkUpperLetters(obj));

→ Ссылка