Вы также застряли на прохождении собеседований по пользовательскому интерфейсу 😕, не волнуйтесь, у меня есть проблема для вас, чтобы попрактиковаться и научиться 😎
💡 Проблема
➡️ Напишите метод 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 #вопросы для интервью #функциональное программирование