Спасибо за подсказку. Переделал. Так понятней стало?
Возможно это предыдущее описание, сейчас на freecodecamp сильно более понятное объяснение как работать с оператором деструктуризации, возможно стоит обновить. Потому что с текущим не понял как решать задачу, перешел на fcc и сразу стало очевидно)
Николай, огромное спасибо за супер подробный ответ
Денис, у тебя здесь главная ошибка в том, что ты при первом же несовпадении контакта возвращаешь 'No such contact'. То есть по сути у тебя логика будет работать только для первого в массиве контакта и только если свойство есть. Но у тебя же и другие контакты проверяются. А как до них дойдет логика? В данном случае никак. То есть тебе надо перечислить все контакты и только если перебрал все и не нашел ни одного по имени, тогда только возвращать ошибку, то есть вынести это условие за пределы цикла. Если в цикле отработает целевое условие и ты выполнишь return - тогда и не дойдет дело до возврата ошибки. А если в цикле ничто не выполнится, тогда уже вернешь ошибку.

Второй момент: ты сразу первым делом проверяешь двойное условие
if (contacts[i].firstName == name && contacts[i].hasOwnProperty(prop)) {
Не надо так. Первое главное условие у тебя: это найден контакт или нет. Если найден, тогда по нему уже все и проверяй далее. Если нет - то пропусти его. То есть оберни все в условие

if(name === contacts[i].firstName) { // Здесь уже все остальные условия пропиши. }
Третий момент: старайся не использовать нестрогое сравнение ==, старайся всегда строгое ===. Иначе не редко будешь ловить логические ошибки.



Николай, сейчас более детально буду изучать предложенный тобой метод, но хотел бы уточнить пока по своему варианту решения - почему я получаю "Unspecified AssertionError" в первой и третьей проверке, не могу увидеть свою ошибку

for (let i=0; i<contacts.length; i++) { if (contacts[i].firstName == name && contacts[i].hasOwnProperty(prop)) { return contacts[i][prop]; } else if (name !== contacts[i].firstName) { return 'No such contact'; } else if (contacts.hasOwnProperty(prop) == false) { return 'No such property'; }

Добрый день!
Статья 2015-го года. Я даже не помню какая версия бутстрапа там использовалась (3 или 4) и не уверен, что этот код работает без подключенного бутстрапа (скорее всего не работает без него), потому что для менюшки же еще стили нужны, а стили использовались как раз бутстраповские. А мой скрипт только делал видимым подменю и скрывал.

В любом случае, смотрите dev-tools браузера, может там ошибки какие есть. Может и jQuery у вас еще не подгружен (свой скрипт навесьте на загрузку документа).
Подскажите пожалуйста а как это все дело подключить? закинул в файл .js, подключил таким образом <script src="/static/dropdown.js"></script>, но не работает
Ушел перепроходить курс по реакту)
Всем привет!

Сорри, что меня почти не было видно и я затянул с переводом уроков по React. Просто я тут вдруг устроился еще на одну работу, и времени стало прям сильно меньше :) Тем не менее, пришли выходные и получилось некоторое время использовать с пользой, и я таки доперевел этот раздел. Очень всем советую к прохождению. Даже если вы уже прошли этот раздел, но пока еще не являетесь экспертом, рекомендую перепройти повторно (я там много что исправил и добавил комментариев).

В качестве напутствия хочу сказать следующее: не воспринимайте React в буквальном смысле как какую-то отдельную самостоятельную и исчерпывающую технологию. Это совсем не так. По большей степени это все следует расценивать как простой синтаксический сахар. Пусть в меня многие за такое утверждение начнут кидать помидоры, но по большому счету это так. Лучше расценивайте его буквально как "HTML-шаблонизатор с возможностью вставлять JavaScript-код, а вся динамика обеспечивается за счет повтороного рендеринга компонентов". Так будет проще и ближе к истине, и вы будете правильней смотреть на отдельные его части.

Почему я вообще на этом акцентирую внимание? Да потому что сам все эти уроки так же прошел, и меня просто убивает подача там информации. По большей степени там многое подается вообще в отрыве от чистого JavaScript. Особенно убивают формулировки типа "Там, где у вас в методе render прописан return, вот там надо JS писать в фигурных скобках". Вот ниразу return ничего здесь не определяет. Определяет внутри ли JSX-тегов вы пытаетесь писать свой JS-код, или за пределами их. Потому что еще раз: "Реакт - это просто HTML вперемешку с JavaSciprt, и обеспечивается это за счет JSX-шаблонизации".

А еще Реакт-компоненты - это просто функции. И даже если это классы, то все равно вспоминаем, что классы в JS - это тоже по сути просто синтаксический сахар, а по сути своей все равно это функции. Так вот, чтобы полноценно изучать React, следует сначала боле менее изучить чистый JavaScript плюс синтаксис ES6 (и хотя бы немного HTML и CSS). В противном случае вы рискуете совсем неправильно понять React и остаться на уровне простого копи-пастера кода.

Кстати, по поводу новой работы: не буду особо вдаваться в детали по поводу что это за проект, скажу только, что это зарубежный проект, который получил весьма неплохие инвестиции и очень активно развивается. И хотя его финансовая сторона меня как бы не касается, тем не менее это играет все-таки некоторую роль, а именно то, что команду туда собрали не маленькую и постарались применить боле менее современные технологии. К сожалению, не самым лучшим образом, иначе, может, и меня бы не звали :) А так пришлось в экстренном порядке осваивать пару новых технологий: Hasura и xState. Ни с тем, ни с другим ранее не работал. Тем не менее, имеющийся опыт позволил почти сразу включиться в проект.

Hasura - это по сути аналог используемой мною Prisma, в том числе используемой и здесь на сайте. То есть это такая GraphQL-прослойка между базой данных и фронтом, позволяющая быстро организовать серверную логику и свое API. Тем не менее, в процессе выяснилось несколько минусов Асуры, из-за чего я никогда ее никому не порекомендую и сам использовать не буду.

А на счет xState я пока не определился добро это или зло. С одной стороны это позволяет более наглядно и четко заложить логику приложения, заствляя подгонять вьюхи под предполагаемую логику. С другой стороны, как и в случае с библиотеками типа Redux, это сильно раздувает кодовую базу. Я не увидел там ничего, что помогло бы сделать то, чего не умеет Реакт из коробки. Так что я все же больше против этой библиотеки, чем за нее.

Но так или иначе, я еще раз для себя подтвердил: я работаю с современным и востребованным стэком, за который неплохо платят. Собственно, ему я и пытаюсь обучить всех желающих. Так что учитесь, проявляйте себя, и наверняка без работы не останетесь (кому-то может и я смогу помочь с трудоустройством).