Вы также застряли на прохождении собеседований по пользовательскому интерфейсу 😕, не волнуйтесь, у меня есть проблема для вас, чтобы попрактиковаться и научиться 😎

💡 Проблема

➡️ Напишите метод readKey, который может получить доступ к вложенным свойствам объекта по заданному пути.

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

const obj = {
  a: 1,
  b: {
    c: 2,
    d: {
      e: 3
    }
  }
}
console.log(readKey(obj, 'a')); // Output: 1
console.log(readKey(obj, 'b.c')); // Output: 2
console.log(readKey(obj, 'b.d.e')); // Output: 3
console.log(readKey(obj, 'x.y.z')); // Output: undefined (Property not found)

Вот как я придумал реализовать то же самое, используя два подхода:

Процедурный код 😕

function readKey(obj, path) {
  const keys = path.split('.');
  let result = obj;
  for (const key of keys) {
    if (typeof result === 'object' && result !== null) {
      result = result[key];
    } else {
      return undefined; // Property not found
    }
  }
  return result;
}

Функциональный код 😎

function readKey(obj, path) {
  return path
    .split('.')
    .reduce((acc, key) => {
      if (acc !== null && typeof acc === 'object') {
        return acc[key]
      }
    }, obj)
}

✋ Игнорирование некоторых пограничных случаев в коде только для простоты.

Теперь сравним плюсы и минусы обоих подходов 🤷‍♂️

Для меня функциональный подход чистый, короткий, абстрактный и более описательный. Также короче код, меньше площадь поверхности для ошибок 😁

С другой стороны, можно утверждать, что процедурный код более оптимизирован, поскольку мы не можем отказаться от метода сокращения, когда уверены, что не найдем ключевой путь в объекте 🤔, но все же я компенсирую это читабельностью кода 😎

Ваше мнение по этому поводу 🤔 ? Пожалуйста, прокомментируйте.

Если вы нашли этот пост актуальным и достойным прочтения, подписывайтесь на меня, чтобы узнать больше…

#javascript #вопросы для интервью #функциональное программирование