Круто, спасибо Никите и Виталию за такую увлекательную вьюху! 😊 Кстати, Виталий не раз помогал мне в чате Хекслета, крутой парень, надеюсь он в ближайшее время сможет устроиться) Желаю успехов! 🎉
Немного удивило, что никто не упомянул, что алгоритм решения задачи с get НЕверен. Там не нужно делать перебор по ключам, так как алгоритм будет отдавать значения по несуществующим путям. Например: get({ b: { b: 5 } }, 'a.b') вернёт 5 Решение: удалить цикл и взять token как первый элемент tokens function get(obj, path) { const tokens = path.split('.'); if (tokens.length === 1) { return obj[path] } const token = tokens[0] if(typeof obj[token] === 'object'){ return get(obj[token], tokens.slice(1).join('.')) } }
задача с get const get = (obj, path) => { var list = (function* gen() { yield* path.split("."); })(); const f = (obj) => { for (var i of list) return obj[i] ? f(obj[i]) : undefined; return obj; }; return f(obj); };
гуглить - это конечно круто. Я бы время поиска бы учитывал. Бывает просто синтаксис подзабыл, а бывает что полностью не знаешь/не понимаешь. На собесе как-то задачку с расчетом фибаначи не решил. Ну забыл как решается, хотя помнил принцип самой последовательности. Зашквар? Терпеть не могу такие задачи на алгоритмы. При решении реальных задач ни разу не пригодились. Было бы классно, найти весь список таких задачек, чтобы сразу разобраться и запомнить, чтобы не позорится на собеседованиях
25:27, А так можно написать? function get(obj, path) { const keys = path.split('.'); let current = obj; for(let key of keys) { if(!current[key]) { return undefined; } current = current[key]; } return current; }
Да, рабочее решение. Можно еще докрутить и будет: const get = (obj, path) => path.split('.').reduce((result, node) => result ? result[node] : undefined, obj)
@@evgenstepanov6319 Допустим есть исходный объект var obj = {a: {b: {c: true}}}. В цикле идет перебор ключей (например для пути 'a.b.c' будут последовательно перебирать a, b, c), и чтобы эти ключи обращались к нужным объектам и сделано присвоение current'у. Без присвоения, после первой итерации будет обращение current['b'], но при таком обращении вернется undefined, т.к. в исходном объекте (оbj), на который сейчас ссылается current нет ключа b. Здесь не нужна глубокая копия объекта, так что решение рабочие.
Никита крутой собеседующий. Дает классные советы (особенно хорош с оптимизацией рандомного цвета), правда в конце задушнил с lch и Ситником (это ж каттинг эдж). Вопросы не от балды из интернетов, а с концепцией, выявляют глубину познаний. А малютке не мешало бы поверстать побольше (кто придумал эту отмазку про гриды, мол они не подходят или редко нужны, когда весь веб дизайн и css-фреймворки реализуют 12-колочный грид). Хотя понимание сетки это на стыке дизайна и верстки, нельзя так пренебрегать гридами. Короче, хорошо получилось!
@@mmorpglasg они реализуют грид/сетку (как концепцию) с помощью flex. Получается своего рода костыль, хотя существует специальная одноименная технология для этого. Вероятно для большей обратной совместимости
мое решение функции get function get(obj, path) { let arr = path.split("."); if (obj === undefined) { return undefined; } if (arr.length === 1) { return obj[arr[0]]; } obj = obj[arr[0]]; return get(obj, arr.splice(1).join(".")); }
Не уверен что генерация цвета через HEX будет проще чем это: function randomColor() { return `rgb(${Math.floor(Math.random()*256)}, ${Math.floor(Math.random()*256)}, ${Math.floor(Math.random()*256)})` }
@@spllit9212 а как в данном случае не повторяться? Заключить повторяющееся выражение в функцию где-то снаружи и вызывать её там где сейчас выражения? По-моему, это только создаст излишний код, который будет чуть сложнее прочитать. Да и вызывать также придётся три раза подряд одну и ту же функцию, тоже наверное DRY не будет соблюдаться. Как здесь переписать соблюдая DRY?
@@AlexiCult а если тебе понадобится изменить работу этой функции ты будешь бегать по коду и везде вносить изменения вместо того, чтобы поместить функцию допустим в переменную и вызывать где понадобится? Если ты функцию сохранишь в переменную она у тебя будет занимать, условно говоря, одну ячейку памяти и ссылка на нее сохранится в переменную. И вызывать ты ее будешь по ссылке вместо того чтобы засорять память одним и тем же.
очень классно что можно гуглить, я напрогал уже несколько сайтов, vue, js, ts, а лайвкодинг просто нулёвый, я просто гуглю каждый момент который только можно нагуглить и просто копирую код построчно -_-
Добрый день. Я так понимаю, выпускник закончил курс по фронту и получает такие задачи на пробном-собеседовании. Подскажите, насколько возможно, что такие задачи будут на реальных собеседованиях ?
Функцую при проверке typeof вернёт function оба оговорились, думаю уровень программирования достаточный , надо вёрстку подучить получше , сверстать пару сайтиков, про тестирование курсы на юдеми , фронт тяжко тестить вообще , но чёт пишут )))
насколько плохо такое решение? function get(obj, path){ if (path === '') return obj; const ar = path.split('.'); for(let i = 0; i < ar.length; i++){ obj = obj[ar[i]]; if(!obj) return obj; } return obj; }
function get(obj, path) { const paths = path.split('.') let ci = 0 let resValue = obj; while (ci < paths.length){ resValue = resValue?.[paths[ci]] ci++ } return resValue } Легко же ?!
Вот решение после рекомендаций рекрутёра: const get = (obj, path) => { if (!obj || !path) { return obj; } const keys = path.split("."); for (const key of keys) { if (obj[key] !== undefined) { //тут ещё можно вот такое извращение написать if (!!obj[key]) { или if (obj[key]||false) { obj = obj[key]; } else{ return undefined; } } return obj; } Если будет массив, и если ключ будет в виде числа то выведется элемент массива под индексом, равным этому числу.
@@user-uniq-id ясно, опять полодим кодеров, которые как макаки клепают код со стековерфлоу, без малейшего понимая контекста исполнения их кода. Сам то давно перестал быть джуном, с таким то отношением?
@@user-uniq-id какую? Как работает отправка запроса? Или как работает рендер? Если ты н когда не сталкивался с проблемами оптимизации чего-то, зависимого от платформы, то это твой промах, а не человека, который повышает экспертизу в своем деле.
Чел жостко оверинженирит и не понимает структуры данных и как с ними работать. UPD: JS тоже не понимает, просто заученный синтаксис повторяет. UPD: верстка тоже слабая UPD: вот и разница между ребятами с института и ребятами с курсов видна, парень вообще слабо понимает что он делает и для чего....
с института, ахахах, видимо ты учился в крутом учебном заведении, в котором действительно дают хороший актуальный материал, а таких просто оооочень мало, единицы из сотен тысяч
@@chikenmacnugget а когда о структурах данных тебе дают лишь то что есть массив и есть обьект, разница между ними в названии (условно), а ты потом сиди и сам бери инфу из разных источников, но не из учебного заведения. Ты умничаешь, но не понимаешь, что универы у всех разные и большинство годовых курсов будут полезнее чем нынешнее профильное IT образование, но главное про ебучее прожовывание сказать и поговорку про яйца
@@АндрейБочарников-х5ъ ну что и требовалось доказать. Самому почитать - трагедия. После прочтения подойти и спросить у препода уточнения и т.д. - неаозможно. Рот ведь нитками зашит. Должны дать все и сразу и желательно разжевать. Ничего удивительного в том что у людей плохое образование и не понимании сути происходящего, когда они как чайки сидят «дай дай дай дай должен должен должен дай дай дай». Я тебе секрет наверное открою, но такая модель образования практически везде, особенно в западных странах она очень развита. Если ты сам не интересуешься и к преподавателю не подходишь с вопросами и т.д., то и ждать от других нечего. Никто бегать за вами и в попку целовать не обязан. А вот вы проявить интерес к своей профессии и собственному развитию, если не обязаны, то хотя бы от вас это ожидается в ВУЗах. ВУЗ в первую очередь это доступ к возможности взаимодействия с человеком квалификация которого больше твоей. А когда ты этого не делаешь, потом прибегаешь в комментарии с пеной у рта доказывать: «все говно, все пропало». Если ты для себя и вокруг себя мир построить не можешь, то почему кто-то должен его строить за тебя и для тебя. Поговорка есть такая: «под лежачий камень вода не течет». Вот помозгуй её и вывод сделай.
И пусть все кому попадет такой код на поддержку в команде охренеют. Осознают как ловко автор использует возможности языка. Телочки текут, быдло уважает 🎉
@@xotamxudoyberganov5847 это от команды зависит на самом деле. Если там все молодые и шутливые, включая тимлида, и хотят показать удаль молодецкую, то не сарказм. А если мемберы уже столько кода отсмотрели, что их не прет от разбора этих конструкций то думаю им лучше зайдет что то типа как написал чел в видео return 'rgb('+randColor()+','+randColor()+','+randColor()+')';