извлечь из массива со вложенностью элемент

есть массив с вложенными массивами groups. Нужно получить имя элемента из groups при условии, что group.code === code. Как это сделать ?

    const arr = 
  [
   {"id":"1","code":"111","name":"обувь","groups":[
     {"id":"12","code":"123","name":"кроссовки"},
    {"id":"2","code":"234","name":"туфли"}]},
  {"id":"13","code":"222","name":"одежда", "groups":[
    {"id":"15","code":"345","name":"брюки"},
    {"id":"17","code":"456","name":"джинсы"}
  ]
  }
 ]

const code = "456"

Мое решение находит нужный элемент, но я не знаю, как получить только имя

console.log(arr.find(el => el.groups.find(gr => gr.code === code)))

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

Автор решения: peperoneen
console.log(arr.find(el => el.groups.find(gr => gr.code === code)).name)
→ Ссылка
Автор решения: Pavel Nazarian

const arr = 
  [
   {"id":"1","code":"111","name":"обувь","groups":[
     {"id":"12","code":"123","name":"кроссовки"},
    {"id":"2","code":"234","name":"туфли"}]},
    
  {"id":"13","code":"222","name":"одежда", "groups":[
    {"id":"15","code":"345","name":"брюки"},
    {"id":"17","code":"456","name":"джинсы"}
  ]
  }
 ]

const code = "345";

let name = arr.reduce((res,el) => {
  res = el.groups.find(item => item.code == code);  
  if (res != undefined) return res.name;
  },'')

console.log(name);

→ Ссылка
Автор решения: Eugene X

Если там дерево в дереве в дереве то я сначала разделал бы дерево в линейку. И просто прошел-бы фильтром. Мне кажется это наибыстрейший вариант. От Object.values и {} если подумать, то можно избавиться. Просто в редюсер передать массив [] и return будет после obj.push(val)

https://codepen.io/latdev/pen/QWMzaRG

function reduceALL(obj, val) {
  if ((val.groups instanceof Array) && val.groups.length) {
    val.groups.reduce(reduceALL, obj);
  }
  obj[val.id] = val;
  return obj;
}

const result = Object.values(arr.reduce(reduceALL, {})).filter(x => x.code === code).map(x => x.name);

=== Дополнено ===

function reduceALL(obj, val) {
  if ((val.groups instanceof Array) && val.groups.length) {
    val.groups.reduce(reduceALL, obj);
  }
  obj.push(val);
  return obj;
}

const result = arr.reduce(reduceALL, []).filter(x => x.code === code).map(x => x.name);
→ Ссылка