Задать вопрос
@kuramaa922

Реализоват функцию, которая принимает первым параметром объект, вторым — массив из цепочки свойств, по которому нужно пройти, чтобы получить значение?

Подскажите, пожалуйста, что нам даёт строчка if (result)?
Зачем создавать отдельную переменную result и присваивать ей obj и почему если просто создать let result, то функция не будет работать(или же определить её сразу в блоке условия let result = result[chain[i]])?

И хотел бы ещё попросить подсказки как решить с помощью рекурсии?
Прошу прощения за столь глупые вопросы
function chaining(obj, chain){
  let result = obj
  if (chain.length === 0) {
    return undefined
  }
  
  for (let i = 0; i < chain.length; i++) {
    if (result) { 
      result = result[chain[i]]
    } else {
      result = undefined
    }
  }
  return result
}

const obj = {
  a: {
    b: {
      c: {
        d: 'Привет!'
      }
    }
  }
}
optionalChaining(obj, ["a", "b", "c", "d"]) // Привет
optionalChaining(obj, ["a", "b", "c", "d", "e"]) // undefined
  • Вопрос задан
  • 266 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@alexalexes
Зачем создавать отдельную переменную result и присваивать ей obj

Разработчик этой функции перестраховался, присвоив объект obj локальной переменной функции result, потому что знает, что из контекста функции можно изменять obj во внешнем контексте, если изменять свойства объекта внутри функции, и далее по тексту запланирована некая рекурсия. Однако, переприсваивание самого obj не повлияет на внешний контекст, в этом случае можно не создавать отдельную переменную result (если ничего не делать со свойствами объекта).
сразу в блоке условия let result = result[chain[i]]

Ну, мысленно или явно оттрасируйте этот момент:
// не объявили result, считай он такой
// result  = undefined
for (let i = 0; i < chain.length; i++) {
    if (result) { // undefined интерпретируется как false
     let result = result[chain[i]] // сюда вообще не попадаем
    } else {
      result = undefined // сюда попадаем при каждом i, причем result идет во внешний контекст
    }
  }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы