[{"data":1,"prerenderedAt":1517},["ShallowReactive",2],{"$fc3gCL_Re4tT_k7HB_ZeOH0tJLtErvm52vKNp_qtq2o0":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":130,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":133,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":458,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":461,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":705,"mdc-cr0lz9-key":725,"mdc-659do-key":737,"mdc-776q-key":745,"mdc--1gakwq-key":753,"mdc-6om4-key":761,"mdc-bbnatf-key":769,"mdc--w9fhb9-key":777,"mdc--6d2r8x-key":814,"mdc--qxp0sg-key":838,"mdc-qonzkr-key":846,"mdc--9negur-key":1037,"mdc--c5rmdc-key":1104,"mdc-1yv7ca-key":1144,"mdc--u5hcmr-key":1160,"mdc--q63suf-key":1216,"mdc--23x3l5-key":1241,"mdc--qlbdeq-key":1259,"mdc--5k0rci-key":1289,"mdc-fu3cma-key":1325,"mdc-8gkl1u-key":1343,"mdc--cbjv43-key":1366,"mdc--6qnjdu-key":1480},{"content":4,"quizQuestionContent":99,"type":118,"pageMeta":119},[5,9,13,16,20,24,27,31,34,38,41,45,48,52,55,59,62,66,69,72,75,79,82,86,89,93,96],{"id":6,"value":7,"isTypeH1":8},"1911","Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4391","Что значит «упорядоченно»","what-does-ordered-mean",{"id":14,"value":15,"isTypeParagraph":8},"10102","Под «упорядоченно» в задачах обычно подразумеваются два разных требования, и от этого зависит выбор структуры:\n\n- Порядок вставки: элементы должны храниться «как добавлялись».\n- Отсортированный порядок: элементы должны быть, например, по алфавиту (и при добавлении/удалении порядок должен сохраняться как «отсортированный»).\n",{"id":17,"description":18,"titleAlert":19,"isTypeAlertInfo":8},"648","«Отсортированный» — это не столько свойство контейнера, сколько правило поддержания порядка. То есть даже если структура хранит элементы в порядке вставки, это не делает её автоматически «отсортированной».",null,{"id":21,"value":22,"anchor":23,"isTypeH2":8},"4392","Разбор вариантов (1–4)","options-1-4-review",{"id":25,"value":26,"isTypeParagraph":8},"10103","Ниже приведено объяснение, что на самом деле «умеет» каждая структура и почему для «списка строк» чаще всего выбирается именно `Array`.\n\n| Вариант | Что хранит | Какой порядок гарантируется | Типичное назначение | Подходит ли для «упорядоченного списка строк» |\n|---|---|---|---|---|\n| 1. `Object` | пары ключ→значение | порядок ключей имеет особые правила и не равен «списку» | структура данных с полями, словарь | обычно нет |\n| 2. `Set` | уникальные значения | обход идёт в порядке вставки | множество уникальных значений | да, если важна уникальность |\n| 3. `Array` | значения по индексам | порядок определяется индексами | список/последовательность | да, основной вариант |\n| 4. `Map` | пары ключ→значение | обход ключей идёт в порядке вставки | словарь, где ключи могут быть любого типа | обычно нет (избыточно для «просто списка») |",{"id":28,"value":29,"anchor":30,"isTypeH3":8},"4401","Почему `Object` — плохой «список»","why-object-is-bad-list",{"id":32,"value":33,"isTypeParagraph":8},"10104","`Object` предназначен для хранения свойств (ключ→значение), а не для «последовательности элементов». Дополнительно порядок перечисления ключей у объекта подчиняется правилам: ключи, которые выглядят как целые числа, могут перечисляться раньше остальных и по возрастанию, из‑за чего получается неожиданный порядок относительно «как добавлялось».\n\nПример, показывающий проблему «ключи‑числа идут не как вставлялись»:\n\n```\nconst obj = {};\nobj[\"2\"] = \"two\";\nobj[\"10\"] = \"ten\";\nobj[\"1\"] = \"one\";\nobj[\"a\"] = \"A\";\n\nObject.keys(obj);\n```\n\nРезультат часто оказывается таким по смыслу: сначала `\"1\"`, `\"2\"`, `\"10\"`, а затем `\"a\"`. Для задачи «упорядоченный список строк» это неудобно, потому что требуется предсказуемая последовательность.",{"id":35,"value":36,"anchor":37,"isTypeH3":8},"4402","Когда `Set` лучше, чем `Array`","when-set-better",{"id":39,"value":40,"isTypeParagraph":8},"10105","`Set` полезен, когда список должен быть «без повторов». Важно понимать, что `Set` — это именно множество: в нём нет привычного «доступа по индексу» как в массиве, и операции «вставить на позицию 3» в привычном смысле отсутствуют.\n\nПример «уникальный список с порядком вставки»:\n\n```\nconst set = new Set();\nset.add(\"alpha\");\nset.add(\"alpha\");\nset.add(\"beta\");\n\nconsole.log([...set]);\n```\n\nОжидаемое содержание по смыслу: `[\"alpha\", \"beta\"]`, потому что повтор `\"alpha\"` не добавляется.",{"id":42,"value":43,"anchor":44,"isTypeH3":8},"4403","Когда `Map` уместен","when-map-fits",{"id":46,"value":47,"isTypeParagraph":8},"10106","`Map` нужен, когда у каждой строки есть связанное значение, то есть требуется не список, а таблица соответствий «строка → данные». Например: «слово → количество», «id → объект», «имя → настройки».\n\nПример «строка → счётчик»:\n\n```\nconst counts = new Map();\ncounts.set(\"apple\", 1);\ncounts.set(\"banana\", 2);\n\ncounts.get(\"banana\");\n```\n\nДля задачи «просто упорядоченный список строк» `Map` обычно избыточен: появляется второе значение (value), хотя требуется хранить только элементы.",{"id":49,"value":50,"anchor":51,"isTypeH2":8},"4393","Практические шаблоны","practical-patterns",{"id":53,"value":54,"isTypeParagraph":8},"10107","В большинстве учебных и прикладных задач достаточно выбрать `Array` и явно поддерживать требуемый порядок (вставки или сортировки). Ниже — типовые варианты.",{"id":56,"value":57,"anchor":58,"isTypeH3":8},"4404","Порядок вставки (как добавлялось)","insertion-order",{"id":60,"value":61,"isTypeParagraph":8},"10108","```\nconst items = [];\nitems.push(\"яблоко\");\nitems.push(\"банан\");\nitems.push(\"вишня\");\n\nconsole.log(items)\n```\n\nРезультат: `[\"яблоко\", \"банан\", \"вишня\"]`.",{"id":63,"value":64,"anchor":65,"isTypeH3":8},"4405","Поддержание сортировки (например, по алфавиту)","keep-sorted",{"id":67,"value":68,"isTypeParagraph":8},"10109","Самый простой подход: хранить данные в массиве и вызывать сортировку после изменений.\n\n```\nconst items = [\"delta\", \"alpha\", \"charlie\", \"bravo\"];\nitems.sort();\n```",{"id":70,"description":71,"titleAlert":19,"isTypeAlertWarning":8},"707","`sort()` без компаратора сортирует строки по внутренним правилам сравнения (не всегда так, как ожидается в «человеческом» алфавитном порядке). Для языко‑зависимой сортировки часто требуется компаратор на основе `localeCompare`, например `a.localeCompare(b, \"ru\")`.",{"id":73,"value":74,"isTypeParagraph":8},"10110","Пример сортировки «ближе к алфавиту для языка»:\n\n```\nconst items = [\"Ёж\", \"Ель\", \"Яблоко\", \"Арбуз\"];\nitems.sort((a, b) => a.localeCompare(b, \"ru\"));\n```",{"id":76,"value":77,"anchor":78,"isTypeH3":8},"4406","«Список без дублей» + сортировка","unique-and-sorted",{"id":80,"value":81,"isTypeParagraph":8},"10111","Если одновременно требуются уникальность и сортировка, удобно комбинировать: сначала уникальность через `Set`, затем преобразование в массив и сортировка.\n\n```\nconst input = [\"beta\", \"alpha\", \"beta\", \"charlie\"];\nconst unique = [...new Set(input)];\n\nunique.sort();\nconsole.log(unique)\n```\n\nРезультат: `[\"alpha\", \"beta\", \"charlie\"]`.",{"id":83,"value":84,"anchor":85,"isTypeH3":8},"4407","«Вставка с сохранением сортировки» (простая версия)","insert-keep-sorted",{"id":87,"value":88,"isTypeParagraph":8},"10112","Если массив должен оставаться отсортированным всегда, можно вставлять элемент и затем сортировать (просто, но не самое эффективное на больших объёмах данных).\n\n```\nconst items = [\"alpha\", \"charlie\", \"delta\"];\nconst next = \"bravo\";\n\nitems.push(next);\nitems.sort();\n```\n\nДля начинающего уровня этого подхода достаточно: он легко читается и редко ошибается.",{"id":90,"value":91,"anchor":92,"isTypeH2":8},"4394","Частые ошибки выбора","common-mistakes",{"id":94,"value":95,"isTypeParagraph":8},"10113","Ошибки, которые чаще всего встречаются при выборе структуры:\n\n- Выбор `Object` для списка: объект — это словарь свойств, а не последовательность; порядок ключей может быть не тем, который ожидается от «списка».\n- Выбор `Map`, когда нужны только значения: `Map` добавляет лишнюю сущность «значение при ключе», из-за чего код становится сложнее без пользы.\n- Выбор `Set`, когда нужны повторы: `Set` специально удаляет дубликаты, поэтому для «списка с повторяющимися строками» он не подходит.\n- Ожидание, что структура «сама сортирует»: сортировка — это отдельная операция или отдельное правило поддержания порядка.\n\nПрактические ориентиры выбора:\n- Если требуется список строк с доступом по позиции и предсказуемым порядком, следует выбирать `Array`.\n- Если требуется список строк без повторов, следует рассматривать `Set` (или `Array` + проверка на дубликаты, но это сложнее).\n- Если требуется соответствие «строка → данные», следует выбирать `Map`.",{"id":97,"value":98,"isTypeParagraph":8},"10114","Итого: для упорядоченного списка строк базовым выбором является `Array`; `Set` уместен при требовании уникальности, `Map` уместен при хранении пар ключ→значение, а `Object` обычно не подходит как «список» из‑за семантики словаря и особенностей порядка ключей.",{"id":100,"options":101,"hint":115,"solution":116,"description":117},"1150",[102,106,109,112],{"id":103,"label":104,"isCorrect":105},"4745","Объект (Object)",false,{"id":107,"label":108,"isCorrect":105},"4746","Set",{"id":110,"label":111,"isCorrect":8},"4747","Массив (Array)",{"id":113,"label":114,"isCorrect":105},"4748","Map","Полезно заменить фразу «список строк» на «последовательность строк». Последовательность в JavaScript естественно представляется массивом, потому что порядок элементов задаётся индексами, и операции добавления/удаления ориентированы именно на список.","**Правильный ответ: 3** - Массив (Array)\n\nДля хранения упорядоченного списка строк в JavaScript наиболее подходящей структурой из перечисленных является `массив (Array)`. Массив — это индексированная коллекция, поэтому «порядок элементов» в нём естественный и предсказуемый: элементы идут по индексам `0, 1, 2, ...`.","Есть список строк. Хочется хранить его упорядоченно. Какую структуру использовать для хранения упорядоченного списка строк?","quizQuestion",{"title":120,"description":121,"ogTitle":122,"ogDescription":121,"ogImageUrl":123,"canonical":19,"ogLocale":124,"ogSiteName":125,"ogImageType":126,"ogImageWidth":127,"ogImageHeight":128,"ogType":129,"ogUrl":19},"Структура для хранения упорядоченного списка строк в JS?","Разбор Object, Set, Array и Map для хранения строк в порядке: вставки или сортировки, с примерами и подсказками.","Упорядоченный список строк в JS: что выбрать","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":131,"siteUrl":132},"GOOD WEB JOB!","https://goodwebjob.ru",{"slugs":134},[135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,368,371,374,377,380,383,386,389,392,395,398,401,404,407,410,413,416,419,422,425,428,431,434,437,440,443,446,449,452,455],{"name":136,"value":137},"Теоретические задания","theoretical-tasks",{"name":139,"value":140},"Что вернёт этот код: typeof (function(){})()","what-this-code-will-return-typeof-function",{"name":142,"value":143},"С чего начать?","where-to-begin",{"name":145,"value":146},"Почему опасно писать прямо в прототипы базовых типов?","why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":148,"value":149},"Backend","backend",{"name":151,"value":152},"Frontend","frontend",{"name":154,"value":155},"Какие логические значения в console.log будут получены?","prototype-what-logical-values-will-be-received-in-console-log",{"name":157,"value":158},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":160,"value":161}," Найти в массиве неповторяющиеся числа","find-non-repeating-numbers-in-an-array",{"name":163,"value":164},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":166,"value":167},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":169,"value":170},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":172,"value":173},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":175,"value":176},"Какое значение выведет консоль с object.property?","what-value-will-the-console-output-with-object-property",{"name":178,"value":179},"Что выведется в console.log([arr[0](), arr[0]()])?","what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":181,"value":182},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":184,"value":185},"Необходимо проверить, являются ли две строки анаграммами друг друга","checks-whether-two-strings-are-anagrams-of-each-other",{"name":187,"value":188},"Определить, является ли слово палиндромом","determines-whether-a-word-is-a-palindrome",{"name":190,"value":191},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":193,"value":194},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":196,"value":197},"Дано дерево (вложенный объект), надо найти сумму всех вершин","given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":199,"value":200},"Для каждой ветви дерева записать номер вложенности данной ветви","for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":202,"value":203},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":205,"value":206},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":208,"value":209},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":211,"value":212},"Напишите функцию, который сделает из массива объект","write-a-function-that-will-make-an-object-out-of-an-array",{"name":214,"value":215},"Что выведет console.log в результате выполнения цикла while?","what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":217,"value":218},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":220,"value":221},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":223,"value":224},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":226,"value":227},"Уникализация значений в массиве","unifying-values-in-an-array",{"name":229,"value":230},"«Расплющивание» массива","flattening-the-array",{"name":232,"value":233},"Что вернёт метод book.getUpperName()?","what-will-the-book-get-upper-name-method-return",{"name":235,"value":236},"Сжатие строк","string-compression",{"name":238,"value":239},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":241,"value":242},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":244,"value":245},"Как браузер после ввода домена понимает, откуда брать сайт?","how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":247,"value":248},"Как домен попадает в DNS в таблицу соответствия: домен – ip","how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":250,"value":251},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":253,"value":254},"Ключевые отличия TCP и UDP","key-differences-between-tcp-and-udp",{"name":256,"value":257},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":259,"value":260},"Что такое HTTP и из чего состоит?","what-is-http-and-what-does-it-consist-of",{"name":262,"value":263},"Что такое заголовки в HTTP и зачем они нужны?","what-are-http-headers-and-why-do-we-need-them",{"name":265,"value":266},"Что такое параметры в HTTP?","what-are-http-parameters",{"name":268,"value":269},"Где находится HTML-код в структуре HTTP-ответа?","where-is-the-html-code-located-in-the-http-response-structure",{"name":271,"value":272},"Что такое HTML?","what-is-html",{"name":274,"value":275},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":277,"value":278},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":280,"value":281},"Что такое cookie?","what-is-a-cookie",{"name":283,"value":284},"Кто является инициатором записи cookie в браузере?","who-initiates-the-cookie-recording-in-the-browser",{"name":286,"value":287},"Есть ли возможность с клиента (с браузера) управлять cookie?","is-it-possible-to-manage-cookies-from-the-client-browser",{"name":289,"value":290},"Лайвкодинг","livecoding",{"name":292,"value":293},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":295,"value":296},"Всё, что идет по HTTPS – оно защищено?","is-everything-that-goes-through-https-secure",{"name":298,"value":299},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":301,"value":302},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":304,"value":305},"Как браузер парсит JavaScript и изображения при рендеринге?","how-the-browser-parses-javascript-and-images-when-rendering",{"name":307,"value":308},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":310,"value":311},"Что в браузере блокирует рендеринг страницы?","what-is-blocking-the-page-rendering-in-the-browser",{"name":313,"value":314},"Что такое DOM в браузере? Что такое CSSOM?","what-is-dom-in-a-browser-what-is-cssom",{"name":316,"value":317},"Что является узлами в DOM?","what-are-nodes-in-the-dom",{"name":319,"value":320},"Из чего состоит CSSOM?","what-does-cssom-consist-of",{"name":322,"value":323},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":325,"value":326},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":328,"value":329},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":331,"value":332},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":334,"value":335},"Есть HTML код. Будет ли font-weight на span влиять?","there-is-an-html-code-will-font-weight-affect-span",{"name":337,"value":338},"Flexbox и Grid, чем отличаются друг от друга?","what-are-the-differences-between-flexbox-and-grid",{"name":340,"value":341},"Заменяют ли Flexbox и Grid друг друга?","do-flexbox-and-grid-replace-each-other",{"name":343,"value":344},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":346,"value":347},"Сборник задач","tasks",{"name":349,"value":350},"Какие способы объявления функции есть в JavaScript?","what-are-the-ways-to-declare-a-function-in-javascript",{"name":352,"value":353},"Что такое this в JavaScript?","what-is-this-in-javascript",{"name":355,"value":356},"Что такое Event Loop, как работает?","what-is-an-event-loop-and-how-does-it-work",{"name":358,"value":359},"Что будет, если вызвать typeof на необъявленной переменной?","what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":361,"value":362},"Что показывает оператор typeof в JavaScript?","what-does-the-typeof-operator-show-in-javascript",{"name":364,"value":365},"Какие типы данных существует в JavaScript?","what-types-of-data-exist-in-javascript",{"name":7,"value":367},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":369,"value":370},"Что вернет typeof для массива?","what-will-typeof-return-for-an-array",{"name":372,"value":373},"Почему оператор typeof, применённый к массиву, возвращает объект?","why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":375,"value":376},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":378,"value":379},"Что возвращает typeof для new Set в JavaScript?","what-does-typeof-return-for-new-set-in-javascript",{"name":381,"value":382},"Для чего нужен React, какие он решает проблемы?","what-is-react-used-for-and-what-problems-does-it-solve",{"name":384,"value":385},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":387,"value":388},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":390,"value":391},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":393,"value":394},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":396,"value":397},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":399,"value":400},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":402,"value":403},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":405,"value":406},"Какие существуют стратегии ветвления для работы команды? Что это такое?","what-are-the-branching-strategies-for-the-team-what-is-it",{"name":408,"value":409},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":411,"value":412},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":414,"value":415},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":417,"value":418},"Что такое алгоритмическая сложность?","what-is-algorithmic-complexity",{"name":420,"value":421},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","what-is-the-algorithmic-complexity-of-quick-sort",{"name":423,"value":424},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":426,"value":427},"Каким способом может выполняться авторизация пользователя на сайте?","how-can-a-user-be-authorized-on-a-website",{"name":429,"value":430},"В чем разница между микро- и макро-тасками в JavaScript?","what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":432,"value":433},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":435,"value":436},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":438,"value":439},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":441,"value":442},"Подготовка к тех.интервью","technical-interview",{"name":444,"value":445},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":447,"value":448},"Что такое DNS, как DNS находит нужный IP-адрес?","what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":450,"value":451},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","variables-are-declared-as-follows-specify-the-correct-statement",{"name":453,"value":454},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":456,"value":457},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",[459],{"label":441,"slug":442,"to":460},"/technical-interview/where-to-begin",{"navigationList":462,"navigationSublist":468},[463,465],{"path":460,"isActive":105,"name":142,"icon":464,"isNavbarMobileDisabled":8},"material-symbols:visibility-outline-rounded",{"path":466,"isActive":8,"name":346,"icon":467,"isNavbarMobileDisabled":105},"/technical-interview/tasks","material-symbols:task-outline",[469,476,495,504,509,604,621,628,633,676,691,696],{"title":470,"list":471,"isOpened":105},"Bash",[472,474],{"name":411,"path":473,"isActive":105},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":414,"path":475,"isActive":105},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":477,"list":478,"isOpened":105},"CSS",[479,481,483,485,487,489,491,493],{"name":322,"path":480,"isActive":105},"/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":325,"path":482,"isActive":105},"/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":328,"path":484,"isActive":105},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":331,"path":486,"isActive":105},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":334,"path":488,"isActive":105},"/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":337,"path":490,"isActive":105},"/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":340,"path":492,"isActive":105},"/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":343,"path":494,"isActive":105},"/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":496,"list":497,"isOpened":105},"Git",[498,500,502],{"name":399,"path":499,"isActive":105},"/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":402,"path":501,"isActive":105},"/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":405,"path":503,"isActive":105},"/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":505,"list":506,"isOpened":105},"HTML",[507],{"name":271,"path":508,"isActive":105},"/technical-interview/tasks/what-is-html",{"title":510,"list":511,"isOpened":105},"JavaScript",[512,514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,560,562,564,566,568,570,572,574,576,578,580,582,584,586,588,590,592,594,596,598,600,602],{"name":154,"path":513,"isActive":105},"/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":145,"path":515,"isActive":105},"/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":292,"path":517,"isActive":105},"/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":175,"path":519,"isActive":105},"/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":178,"path":521,"isActive":105},"/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":214,"path":523,"isActive":105},"/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":217,"path":525,"isActive":105},"/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":232,"path":527,"isActive":105},"/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":450,"path":529,"isActive":105},"/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":238,"path":531,"isActive":105},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":220,"path":533,"isActive":105},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":223,"path":535,"isActive":105},"/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":139,"path":537,"isActive":105},"/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":241,"path":539,"isActive":105},"/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":349,"path":541,"isActive":105},"/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":352,"path":543,"isActive":105},"/technical-interview/tasks/what-is-this-in-javascript",{"name":355,"path":545,"isActive":105},"/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":358,"path":547,"isActive":105},"/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":361,"path":549,"isActive":105},"/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":364,"path":551,"isActive":105},"/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":7,"path":553,"isActive":105},"/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":369,"path":555,"isActive":105},"/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":372,"path":557,"isActive":105},"/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":375,"path":559,"isActive":105},"/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":378,"path":561,"isActive":105},"/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":423,"path":563,"isActive":105},"/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":429,"path":565,"isActive":105},"/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":163,"path":567,"isActive":105},"/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":181,"path":569,"isActive":105},"/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":166,"path":571,"isActive":105},"/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":196,"path":573,"isActive":105},"/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":172,"path":575,"isActive":105},"/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":199,"path":577,"isActive":105},"/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":190,"path":579,"isActive":105},"/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":202,"path":581,"isActive":105},"/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":208,"path":583,"isActive":105},"/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":160,"path":585,"isActive":105},"/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":211,"path":587,"isActive":105},"/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":184,"path":589,"isActive":105},"/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":157,"path":591,"isActive":105},"/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":187,"path":593,"isActive":105},"/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":229,"path":595,"isActive":105},"/technical-interview/tasks/flattening-the-array",{"name":193,"path":597,"isActive":105},"/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":235,"path":599,"isActive":105},"/technical-interview/tasks/string-compression",{"name":226,"path":601,"isActive":105},"/technical-interview/tasks/unifying-values-in-an-array",{"name":205,"path":603,"isActive":105},"/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":605,"list":606,"isOpened":105},"React",[607,609,611,613,615,617,619],{"name":381,"path":608,"isActive":105},"/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":453,"path":610,"isActive":105},"/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":384,"path":612,"isActive":105},"/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":387,"path":614,"isActive":105},"/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":390,"path":616,"isActive":105},"/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":393,"path":618,"isActive":105},"/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":456,"path":620,"isActive":105},"/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":622,"list":623,"isOpened":105},"Алгоритмы",[624,626],{"name":417,"path":625,"isActive":105},"/technical-interview/tasks/what-is-algorithmic-complexity",{"name":420,"path":627,"isActive":105},"/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":629,"list":630,"isOpened":105},"Дебаггинг",[631],{"name":396,"path":632,"isActive":105},"/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":634,"list":635,"isOpened":105},"Компьютерные сети",[636,638,640,642,644,646,648,650,652,654,656,658,660,662,664,666,668,670,672,674],{"name":244,"path":637,"isActive":105},"/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":447,"path":639,"isActive":105},"/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":247,"path":641,"isActive":105},"/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":250,"path":643,"isActive":105},"/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":253,"path":645,"isActive":105},"/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":256,"path":647,"isActive":105},"/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":259,"path":649,"isActive":105},"/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":262,"path":651,"isActive":105},"/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":265,"path":653,"isActive":105},"/technical-interview/tasks/what-are-http-parameters",{"name":268,"path":655,"isActive":105},"/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":274,"path":657,"isActive":105},"/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":277,"path":659,"isActive":105},"/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":280,"path":661,"isActive":105},"/technical-interview/tasks/what-is-a-cookie",{"name":283,"path":663,"isActive":105},"/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":286,"path":665,"isActive":105},"/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":444,"path":667,"isActive":105},"/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":295,"path":669,"isActive":105},"/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":298,"path":671,"isActive":105},"/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":301,"path":673,"isActive":105},"/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":426,"path":675,"isActive":105},"/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":677,"list":678,"isOpened":105},"Отрисовка в браузере",[679,681,683,685,687,689],{"name":307,"path":680,"isActive":105},"/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":304,"path":682,"isActive":105},"/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":310,"path":684,"isActive":105},"/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":313,"path":686,"isActive":105},"/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":316,"path":688,"isActive":105},"/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":319,"path":690,"isActive":105},"/technical-interview/tasks/what-does-cssom-consist-of",{"title":692,"list":693,"isOpened":105},"Ревью кода",[694],{"name":408,"path":695,"isActive":105},"/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":697,"list":698,"isOpened":105},"Теория вероятности",[699,701,703],{"name":432,"path":700,"isActive":105},"/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":435,"path":702,"isActive":105},"/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":438,"path":704,"isActive":105},"/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"cooperation":706,"copyright":709,"reportError":710,"socialNetwork":712},{"link":707,"title":708},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":711,"link":707},"Сообщить об ошибке",{"label":713,"socialNetworkList":714},"Мы в соцсетях:",[715,718,721],{"icon":19,"link":716,"title":717},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":719,"link":707,"title":720},"ic:baseline-telegram","Telegram",{"icon":722,"link":723,"title":724},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":726,"body":727},{},{"type":728,"children":729},"root",[730],{"type":731,"tag":732,"props":733,"children":734},"element","p",{},[735],{"type":736,"value":117},"text",{"data":738,"body":739},{},{"type":728,"children":740},[741],{"type":731,"tag":732,"props":742,"children":743},{},[744],{"type":736,"value":104},{"data":746,"body":747},{},{"type":728,"children":748},[749],{"type":731,"tag":732,"props":750,"children":751},{},[752],{"type":736,"value":108},{"data":754,"body":755},{},{"type":728,"children":756},[757],{"type":731,"tag":732,"props":758,"children":759},{},[760],{"type":736,"value":111},{"data":762,"body":763},{},{"type":728,"children":764},[765],{"type":731,"tag":732,"props":766,"children":767},{},[768],{"type":736,"value":114},{"data":770,"body":771},{},{"type":728,"children":772},[773],{"type":731,"tag":732,"props":774,"children":775},{},[776],{"type":736,"value":115},{"data":778,"body":779},{},{"type":728,"children":780},[781,792],{"type":731,"tag":732,"props":782,"children":783},{},[784,790],{"type":731,"tag":785,"props":786,"children":787},"strong",{},[788],{"type":736,"value":789},"Правильный ответ: 3",{"type":736,"value":791}," - Массив (Array)",{"type":731,"tag":732,"props":793,"children":794},{},[795,797,804,806,812],{"type":736,"value":796},"Для хранения упорядоченного списка строк в JavaScript наиболее подходящей структурой из перечисленных является ",{"type":731,"tag":798,"props":799,"children":801},"code",{"className":800},[],[802],{"type":736,"value":803},"массив (Array)",{"type":736,"value":805},". Массив — это индексированная коллекция, поэтому «порядок элементов» в нём естественный и предсказуемый: элементы идут по индексам ",{"type":731,"tag":798,"props":807,"children":809},{"className":808},[],[810],{"type":736,"value":811},"0, 1, 2, ...",{"type":736,"value":813},".",{"data":815,"body":816},{},{"type":728,"children":817},[818,823],{"type":731,"tag":732,"props":819,"children":820},{},[821],{"type":736,"value":822},"Под «упорядоченно» в задачах обычно подразумеваются два разных требования, и от этого зависит выбор структуры:",{"type":731,"tag":824,"props":825,"children":826},"ul",{},[827,833],{"type":731,"tag":828,"props":829,"children":830},"li",{},[831],{"type":736,"value":832},"Порядок вставки: элементы должны храниться «как добавлялись».",{"type":731,"tag":828,"props":834,"children":835},{},[836],{"type":736,"value":837},"Отсортированный порядок: элементы должны быть, например, по алфавиту (и при добавлении/удалении порядок должен сохраняться как «отсортированный»).",{"data":839,"body":840},{},{"type":728,"children":841},[842],{"type":731,"tag":732,"props":843,"children":844},{},[845],{"type":736,"value":18},{"data":847,"body":848},{},{"type":728,"children":849},[850,862],{"type":731,"tag":732,"props":851,"children":852},{},[853,855,861],{"type":736,"value":854},"Ниже приведено объяснение, что на самом деле «умеет» каждая структура и почему для «списка строк» чаще всего выбирается именно ",{"type":731,"tag":798,"props":856,"children":858},{"className":857},[],[859],{"type":736,"value":860},"Array",{"type":736,"value":813},{"type":731,"tag":863,"props":864,"children":865},"table",{},[866,900],{"type":731,"tag":867,"props":868,"children":869},"thead",{},[870],{"type":731,"tag":871,"props":872,"children":873},"tr",{},[874,880,885,890,895],{"type":731,"tag":875,"props":876,"children":877},"th",{},[878],{"type":736,"value":879},"Вариант",{"type":731,"tag":875,"props":881,"children":882},{},[883],{"type":736,"value":884},"Что хранит",{"type":731,"tag":875,"props":886,"children":887},{},[888],{"type":736,"value":889},"Какой порядок гарантируется",{"type":731,"tag":875,"props":891,"children":892},{},[893],{"type":736,"value":894},"Типичное назначение",{"type":731,"tag":875,"props":896,"children":897},{},[898],{"type":736,"value":899},"Подходит ли для «упорядоченного списка строк»",{"type":731,"tag":901,"props":902,"children":903},"tbody",{},[904,939,972,1005],{"type":731,"tag":871,"props":905,"children":906},{},[907,919,924,929,934],{"type":731,"tag":908,"props":909,"children":910},"td",{},[911,913],{"type":736,"value":912},"1. ",{"type":731,"tag":798,"props":914,"children":916},{"className":915},[],[917],{"type":736,"value":918},"Object",{"type":731,"tag":908,"props":920,"children":921},{},[922],{"type":736,"value":923},"пары ключ→значение",{"type":731,"tag":908,"props":925,"children":926},{},[927],{"type":736,"value":928},"порядок ключей имеет особые правила и не равен «списку»",{"type":731,"tag":908,"props":930,"children":931},{},[932],{"type":736,"value":933},"структура данных с полями, словарь",{"type":731,"tag":908,"props":935,"children":936},{},[937],{"type":736,"value":938},"обычно нет",{"type":731,"tag":871,"props":940,"children":941},{},[942,952,957,962,967],{"type":731,"tag":908,"props":943,"children":944},{},[945,947],{"type":736,"value":946},"2. ",{"type":731,"tag":798,"props":948,"children":950},{"className":949},[],[951],{"type":736,"value":108},{"type":731,"tag":908,"props":953,"children":954},{},[955],{"type":736,"value":956},"уникальные значения",{"type":731,"tag":908,"props":958,"children":959},{},[960],{"type":736,"value":961},"обход идёт в порядке вставки",{"type":731,"tag":908,"props":963,"children":964},{},[965],{"type":736,"value":966},"множество уникальных значений",{"type":731,"tag":908,"props":968,"children":969},{},[970],{"type":736,"value":971},"да, если важна уникальность",{"type":731,"tag":871,"props":973,"children":974},{},[975,985,990,995,1000],{"type":731,"tag":908,"props":976,"children":977},{},[978,980],{"type":736,"value":979},"3. ",{"type":731,"tag":798,"props":981,"children":983},{"className":982},[],[984],{"type":736,"value":860},{"type":731,"tag":908,"props":986,"children":987},{},[988],{"type":736,"value":989},"значения по индексам",{"type":731,"tag":908,"props":991,"children":992},{},[993],{"type":736,"value":994},"порядок определяется индексами",{"type":731,"tag":908,"props":996,"children":997},{},[998],{"type":736,"value":999},"список/последовательность",{"type":731,"tag":908,"props":1001,"children":1002},{},[1003],{"type":736,"value":1004},"да, основной вариант",{"type":731,"tag":871,"props":1006,"children":1007},{},[1008,1018,1022,1027,1032],{"type":731,"tag":908,"props":1009,"children":1010},{},[1011,1013],{"type":736,"value":1012},"4. ",{"type":731,"tag":798,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":736,"value":114},{"type":731,"tag":908,"props":1019,"children":1020},{},[1021],{"type":736,"value":923},{"type":731,"tag":908,"props":1023,"children":1024},{},[1025],{"type":736,"value":1026},"обход ключей идёт в порядке вставки",{"type":731,"tag":908,"props":1028,"children":1029},{},[1030],{"type":736,"value":1031},"словарь, где ключи могут быть любого типа",{"type":731,"tag":908,"props":1033,"children":1034},{},[1035],{"type":736,"value":1036},"обычно нет (избыточно для «просто списка»)",{"data":1038,"body":1039},{},{"type":728,"children":1040},[1041,1051,1056,1068],{"type":731,"tag":732,"props":1042,"children":1043},{},[1044,1049],{"type":731,"tag":798,"props":1045,"children":1047},{"className":1046},[],[1048],{"type":736,"value":918},{"type":736,"value":1050}," предназначен для хранения свойств (ключ→значение), а не для «последовательности элементов». Дополнительно порядок перечисления ключей у объекта подчиняется правилам: ключи, которые выглядят как целые числа, могут перечисляться раньше остальных и по возрастанию, из‑за чего получается неожиданный порядок относительно «как добавлялось».",{"type":731,"tag":732,"props":1052,"children":1053},{},[1054],{"type":736,"value":1055},"Пример, показывающий проблему «ключи‑числа идут не как вставлялись»:",{"type":731,"tag":1057,"props":1058,"children":1062},"pre",{"className":1059,"code":1061,"language":736},[1060],"language-text","const obj = {};\nobj[\"2\"] = \"two\";\nobj[\"10\"] = \"ten\";\nobj[\"1\"] = \"one\";\nobj[\"a\"] = \"A\";\n\nObject.keys(obj);\n",[1063],{"type":731,"tag":798,"props":1064,"children":1066},{"__ignoreMap":1065},"",[1067],{"type":736,"value":1061},{"type":731,"tag":732,"props":1069,"children":1070},{},[1071,1073,1079,1081,1087,1088,1094,1096,1102],{"type":736,"value":1072},"Результат часто оказывается таким по смыслу: сначала ",{"type":731,"tag":798,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":736,"value":1078},"\"1\"",{"type":736,"value":1080},", ",{"type":731,"tag":798,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":736,"value":1086},"\"2\"",{"type":736,"value":1080},{"type":731,"tag":798,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":736,"value":1093},"\"10\"",{"type":736,"value":1095},", а затем ",{"type":731,"tag":798,"props":1097,"children":1099},{"className":1098},[],[1100],{"type":736,"value":1101},"\"a\"",{"type":736,"value":1103},". Для задачи «упорядоченный список строк» это неудобно, потому что требуется предсказуемая последовательность.",{"data":1105,"body":1106},{},{"type":728,"children":1107},[1108,1118,1123,1132],{"type":731,"tag":732,"props":1109,"children":1110},{},[1111,1116],{"type":731,"tag":798,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":736,"value":114},{"type":736,"value":1117}," нужен, когда у каждой строки есть связанное значение, то есть требуется не список, а таблица соответствий «строка → данные». Например: «слово → количество», «id → объект», «имя → настройки».",{"type":731,"tag":732,"props":1119,"children":1120},{},[1121],{"type":736,"value":1122},"Пример «строка → счётчик»:",{"type":731,"tag":1057,"props":1124,"children":1127},{"className":1125,"code":1126,"language":736},[1060],"const counts = new Map();\ncounts.set(\"apple\", 1);\ncounts.set(\"banana\", 2);\n\ncounts.get(\"banana\");\n",[1128],{"type":731,"tag":798,"props":1129,"children":1130},{"__ignoreMap":1065},[1131],{"type":736,"value":1126},{"type":731,"tag":732,"props":1133,"children":1134},{},[1135,1137,1142],{"type":736,"value":1136},"Для задачи «просто упорядоченный список строк» ",{"type":731,"tag":798,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":736,"value":114},{"type":736,"value":1143}," обычно избыточен: появляется второе значение (value), хотя требуется хранить только элементы.",{"data":1145,"body":1146},{},{"type":728,"children":1147},[1148],{"type":731,"tag":732,"props":1149,"children":1150},{},[1151,1153,1158],{"type":736,"value":1152},"В большинстве учебных и прикладных задач достаточно выбрать ",{"type":731,"tag":798,"props":1154,"children":1156},{"className":1155},[],[1157],{"type":736,"value":860},{"type":736,"value":1159}," и явно поддерживать требуемый порядок (вставки или сортировки). Ниже — типовые варианты.",{"data":1161,"body":1162},{},{"type":728,"children":1163},[1164,1181,1186,1195],{"type":731,"tag":732,"props":1165,"children":1166},{},[1167,1172,1174,1179],{"type":731,"tag":798,"props":1168,"children":1170},{"className":1169},[],[1171],{"type":736,"value":108},{"type":736,"value":1173}," полезен, когда список должен быть «без повторов». Важно понимать, что ",{"type":731,"tag":798,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":736,"value":108},{"type":736,"value":1180}," — это именно множество: в нём нет привычного «доступа по индексу» как в массиве, и операции «вставить на позицию 3» в привычном смысле отсутствуют.",{"type":731,"tag":732,"props":1182,"children":1183},{},[1184],{"type":736,"value":1185},"Пример «уникальный список с порядком вставки»:",{"type":731,"tag":1057,"props":1187,"children":1190},{"className":1188,"code":1189,"language":736},[1060],"const set = new Set();\nset.add(\"alpha\");\nset.add(\"alpha\");\nset.add(\"beta\");\n\nconsole.log([...set]);\n",[1191],{"type":731,"tag":798,"props":1192,"children":1193},{"__ignoreMap":1065},[1194],{"type":736,"value":1189},{"type":731,"tag":732,"props":1196,"children":1197},{},[1198,1200,1206,1208,1214],{"type":736,"value":1199},"Ожидаемое содержание по смыслу: ",{"type":731,"tag":798,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":736,"value":1205},"[\"alpha\", \"beta\"]",{"type":736,"value":1207},", потому что повтор ",{"type":731,"tag":798,"props":1209,"children":1211},{"className":1210},[],[1212],{"type":736,"value":1213},"\"alpha\"",{"type":736,"value":1215}," не добавляется.",{"data":1217,"body":1218},{},{"type":728,"children":1219},[1220,1229],{"type":731,"tag":1057,"props":1221,"children":1224},{"className":1222,"code":1223,"language":736},[1060],"const items = [];\nitems.push(\"яблоко\");\nitems.push(\"банан\");\nitems.push(\"вишня\");\n\nconsole.log(items)\n",[1225],{"type":731,"tag":798,"props":1226,"children":1227},{"__ignoreMap":1065},[1228],{"type":736,"value":1223},{"type":731,"tag":732,"props":1230,"children":1231},{},[1232,1234,1240],{"type":736,"value":1233},"Результат: ",{"type":731,"tag":798,"props":1235,"children":1237},{"className":1236},[],[1238],{"type":736,"value":1239},"[\"яблоко\", \"банан\", \"вишня\"]",{"type":736,"value":813},{"data":1242,"body":1243},{},{"type":728,"children":1244},[1245,1250],{"type":731,"tag":732,"props":1246,"children":1247},{},[1248],{"type":736,"value":1249},"Самый простой подход: хранить данные в массиве и вызывать сортировку после изменений.",{"type":731,"tag":1057,"props":1251,"children":1254},{"className":1252,"code":1253,"language":736},[1060],"const items = [\"delta\", \"alpha\", \"charlie\", \"bravo\"];\nitems.sort();\n",[1255],{"type":731,"tag":798,"props":1256,"children":1257},{"__ignoreMap":1065},[1258],{"type":736,"value":1253},{"data":1260,"body":1261},{},{"type":728,"children":1262},[1263],{"type":731,"tag":732,"props":1264,"children":1265},{},[1266,1272,1274,1280,1282,1288],{"type":731,"tag":798,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":736,"value":1271},"sort()",{"type":736,"value":1273}," без компаратора сортирует строки по внутренним правилам сравнения (не всегда так, как ожидается в «человеческом» алфавитном порядке). Для языко‑зависимой сортировки часто требуется компаратор на основе ",{"type":731,"tag":798,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":736,"value":1279},"localeCompare",{"type":736,"value":1281},", например ",{"type":731,"tag":798,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":736,"value":1287},"a.localeCompare(b, \"ru\")",{"type":736,"value":813},{"data":1290,"body":1291},{},{"type":728,"children":1292},[1293,1305,1314],{"type":731,"tag":732,"props":1294,"children":1295},{},[1296,1298,1303],{"type":736,"value":1297},"Если одновременно требуются уникальность и сортировка, удобно комбинировать: сначала уникальность через ",{"type":731,"tag":798,"props":1299,"children":1301},{"className":1300},[],[1302],{"type":736,"value":108},{"type":736,"value":1304},", затем преобразование в массив и сортировка.",{"type":731,"tag":1057,"props":1306,"children":1309},{"className":1307,"code":1308,"language":736},[1060],"const input = [\"beta\", \"alpha\", \"beta\", \"charlie\"];\nconst unique = [...new Set(input)];\n\nunique.sort();\nconsole.log(unique)\n",[1310],{"type":731,"tag":798,"props":1311,"children":1312},{"__ignoreMap":1065},[1313],{"type":736,"value":1308},{"type":731,"tag":732,"props":1315,"children":1316},{},[1317,1318,1324],{"type":736,"value":1233},{"type":731,"tag":798,"props":1319,"children":1321},{"className":1320},[],[1322],{"type":736,"value":1323},"[\"alpha\", \"beta\", \"charlie\"]",{"type":736,"value":813},{"data":1326,"body":1327},{},{"type":728,"children":1328},[1329,1334],{"type":731,"tag":732,"props":1330,"children":1331},{},[1332],{"type":736,"value":1333},"Пример сортировки «ближе к алфавиту для языка»:",{"type":731,"tag":1057,"props":1335,"children":1338},{"className":1336,"code":1337,"language":736},[1060],"const items = [\"Ёж\", \"Ель\", \"Яблоко\", \"Арбуз\"];\nitems.sort((a, b) => a.localeCompare(b, \"ru\"));\n",[1339],{"type":731,"tag":798,"props":1340,"children":1341},{"__ignoreMap":1065},[1342],{"type":736,"value":1337},{"data":1344,"body":1345},{},{"type":728,"children":1346},[1347,1352,1361],{"type":731,"tag":732,"props":1348,"children":1349},{},[1350],{"type":736,"value":1351},"Если массив должен оставаться отсортированным всегда, можно вставлять элемент и затем сортировать (просто, но не самое эффективное на больших объёмах данных).",{"type":731,"tag":1057,"props":1353,"children":1356},{"className":1354,"code":1355,"language":736},[1060],"const items = [\"alpha\", \"charlie\", \"delta\"];\nconst next = \"bravo\";\n\nitems.push(next);\nitems.sort();\n",[1357],{"type":731,"tag":798,"props":1358,"children":1359},{"__ignoreMap":1065},[1360],{"type":736,"value":1355},{"type":731,"tag":732,"props":1362,"children":1363},{},[1364],{"type":736,"value":1365},"Для начинающего уровня этого подхода достаточно: он легко читается и редко ошибается.",{"data":1367,"body":1368},{},{"type":728,"children":1369},[1370,1375,1431,1436],{"type":731,"tag":732,"props":1371,"children":1372},{},[1373],{"type":736,"value":1374},"Ошибки, которые чаще всего встречаются при выборе структуры:",{"type":731,"tag":824,"props":1376,"children":1377},{},[1378,1390,1408,1426],{"type":731,"tag":828,"props":1379,"children":1380},{},[1381,1383,1388],{"type":736,"value":1382},"Выбор ",{"type":731,"tag":798,"props":1384,"children":1386},{"className":1385},[],[1387],{"type":736,"value":918},{"type":736,"value":1389}," для списка: объект — это словарь свойств, а не последовательность; порядок ключей может быть не тем, который ожидается от «списка».",{"type":731,"tag":828,"props":1391,"children":1392},{},[1393,1394,1399,1401,1406],{"type":736,"value":1382},{"type":731,"tag":798,"props":1395,"children":1397},{"className":1396},[],[1398],{"type":736,"value":114},{"type":736,"value":1400},", когда нужны только значения: ",{"type":731,"tag":798,"props":1402,"children":1404},{"className":1403},[],[1405],{"type":736,"value":114},{"type":736,"value":1407}," добавляет лишнюю сущность «значение при ключе», из-за чего код становится сложнее без пользы.",{"type":731,"tag":828,"props":1409,"children":1410},{},[1411,1412,1417,1419,1424],{"type":736,"value":1382},{"type":731,"tag":798,"props":1413,"children":1415},{"className":1414},[],[1416],{"type":736,"value":108},{"type":736,"value":1418},", когда нужны повторы: ",{"type":731,"tag":798,"props":1420,"children":1422},{"className":1421},[],[1423],{"type":736,"value":108},{"type":736,"value":1425}," специально удаляет дубликаты, поэтому для «списка с повторяющимися строками» он не подходит.",{"type":731,"tag":828,"props":1427,"children":1428},{},[1429],{"type":736,"value":1430},"Ожидание, что структура «сама сортирует»: сортировка — это отдельная операция или отдельное правило поддержания порядка.",{"type":731,"tag":732,"props":1432,"children":1433},{},[1434],{"type":736,"value":1435},"Практические ориентиры выбора:",{"type":731,"tag":824,"props":1437,"children":1438},{},[1439,1450,1469],{"type":731,"tag":828,"props":1440,"children":1441},{},[1442,1444,1449],{"type":736,"value":1443},"Если требуется список строк с доступом по позиции и предсказуемым порядком, следует выбирать ",{"type":731,"tag":798,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":736,"value":860},{"type":736,"value":813},{"type":731,"tag":828,"props":1451,"children":1452},{},[1453,1455,1460,1462,1467],{"type":736,"value":1454},"Если требуется список строк без повторов, следует рассматривать ",{"type":731,"tag":798,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":736,"value":108},{"type":736,"value":1461}," (или ",{"type":731,"tag":798,"props":1463,"children":1465},{"className":1464},[],[1466],{"type":736,"value":860},{"type":736,"value":1468}," + проверка на дубликаты, но это сложнее).",{"type":731,"tag":828,"props":1470,"children":1471},{},[1472,1474,1479],{"type":736,"value":1473},"Если требуется соответствие «строка → данные», следует выбирать ",{"type":731,"tag":798,"props":1475,"children":1477},{"className":1476},[],[1478],{"type":736,"value":114},{"type":736,"value":813},{"data":1481,"body":1482},{},{"type":728,"children":1483},[1484],{"type":731,"tag":732,"props":1485,"children":1486},{},[1487,1489,1494,1496,1501,1503,1508,1510,1515],{"type":736,"value":1488},"Итого: для упорядоченного списка строк базовым выбором является ",{"type":731,"tag":798,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":736,"value":860},{"type":736,"value":1495},"; ",{"type":731,"tag":798,"props":1497,"children":1499},{"className":1498},[],[1500],{"type":736,"value":108},{"type":736,"value":1502}," уместен при требовании уникальности, ",{"type":731,"tag":798,"props":1504,"children":1506},{"className":1505},[],[1507],{"type":736,"value":114},{"type":736,"value":1509}," уместен при хранении пар ключ→значение, а ",{"type":731,"tag":798,"props":1511,"children":1513},{"className":1512},[],[1514],{"type":736,"value":918},{"type":736,"value":1516}," обычно не подходит как «список» из‑за семантики словаря и особенностей порядка ключей.",1775735655417]