Помогите с рекурсией

110
14 февраля 2022, 10:30

Задача - сделать функцию для поиска по объекту сложной вложенности, нужно найти значение ячейки с именем "treasure" вот пример проверки:

const obj = { 
  a: ["qwe", 124], 
  b: { 
    c: ["zaaaz"], 
    d: [{ treasure: 1755 }], 
    e: "treasure" 
  }, 
  f: { 
    g: "key" 
  }, 
  h: ["qwe", 124] 
}; 
console.log(findTreasure(obj));

Набросал приблизительное решение, но не выходит вернуть искомое значение

function findTreasure(obj, a = 0, searchingName = "treasure") { 
  for (let m in obj) { 
    if (obj[searchingName]) { 
      a = obj[searchingName]; 
    } else if (typeof obj[m] === "object") findTreasure(obj[m], a); 
  } 
  return a; 
}

Подскажите, где накосячил

Answer 1

В коде есть несколько проблем:

  1. если значение найдено - продолжается проход по остальным полям, хотя можно было выйти
  2. не возвращается результат рекурсии
  3. не проверяется результат рекурсии

Если исправить эти проблемы можно получить следующий код:

function findTreasure(obj, searchingName = "treasure") { 
  if (obj[searchingName]) { 
    return obj[searchingName]; 
  } 
  for (let m in obj) { 
    if (typeof obj[m] === "object") { 
      var val = findTreasure(obj[m], searchingName); 
      if (val) return val; 
    } 
  } 
} 
 
const obj = { 
  a: ["qwe", 124], 
  b: { 
    c: ["zaaaz"], 
    d: [{ 
      treasure: 1755 
    }], 
    e: "treasure" 
  }, 
  f: { 
    g: "key" 
  }, 
  h: ["qwe", 124] 
}; 
console.log(findTreasure(obj));

READ ALSO
Анимация продавливания плитки в стиле Windows 8

Анимация продавливания плитки в стиле Windows 8

Подскажите пожалуйста, как реализовать подобную анимацию без сторонних библиотек или jQueryГифку изъял отсюда из следующего раздела:

92
vue событие клавиатуры

vue событие клавиатуры

Есть такой небольшой vue проект: codesandbox

132
Парсинг данных из angular

Парсинг данных из angular

Заранее извиняюсь за возможно банальный и туповатый вопрос - никогда прежде не имел ничего общего с angular

95
Почему длина числа равна undefined?

Почему длина числа равна undefined?

Может кто-то объяснить, почему такой код

109