[{"data":1,"prerenderedAt":1056},["ShallowReactive",2],{"$f4J205TN_6SlED4fOrOz2qUdgnJyYTjET0k1m7_sa4cc":3,"$f-KhKwB8J0md5Q3U1oyqNCQbHxVpirjaanlJWCGo_ht4":106,"$fkVWEWXZHbLy86BhC78gDVDJ_00TY4k_DsdZD3Mz6ZO0":109,"$fqGwjmVbyPxmA5lnsLz9nF3m-ncS8WzLIlTsTA85cuZA":114,"$fVMSX_HWVzVkzv-u5ATHiOgClblPaIGZfXUn_Cq8LKn4":461,"$fw0tI3d-iV2W3zZtbRjyPNNRSgXGobrmwsMU7a1fynls":682,"mdc--7e8qmc-key":702,"mdc-4lovc6-key":756,"mdc-vn707y-key":770,"mdc--bb3b1h-key":792,"mdc--dxho42-key":806,"mdc-5dk1eg-key":836,"mdc-iku944-key":904,"mdc--85p6l2-key":1032},{"content":4,"livecodingContent":58,"type":93,"pageMeta":94},[5,9,13,17,20,24,27,31,34,38,41,45,48,52,55],{"id":6,"value":7,"isTypeH1":8},"1981","Есть массив в котором лежат объекты с датами, необходимо отсортировать даты по убыванию",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4616","Теория: как решается задача по шагам","theory-kak-reshaetsya-zadacha-po-shagam",{"id":14,"value":15,"anchor":16,"isTypeH3":8},"4653","Почему нельзя сортировать строки напрямую","why-cannot-sort-strings-directly",{"id":18,"value":19,"isTypeParagraph":8},"10619","Строка \"dd.mm.yyyy\" при обычной сортировке строк сравнивает символы слева направо, поэтому лексикографический порядок не совпадает с хронологическим порядком дат.\n\nКорректная сортировка требует привести дату либо к числу (timestamp), либо к строке формата, где порядок символов соответствует времени (например, \"yyyy-mm-dd\").",{"id":21,"value":22,"anchor":23,"isTypeH3":8},"4654","Почему нужен ручной разбор \"dd.mm.yyyy\"","why-manual-parse-needed",{"id":25,"value":26,"isTypeParagraph":8},"10620","Парсинг не-ISO форматов строк не гарантирован одинаково во всех реализациях, поэтому надежнее выделить dd, mm, yyyy регулярным выражением и преобразовать в числа.\n\nРегулярное выражение `^(\\d{2})\\.(\\d{2})\\.(\\d{4})$` гарантирует строго нужный формат, что упрощает обработку ошибок.",{"id":28,"value":29,"anchor":30,"isTypeH3":8},"4655","Нормализация переполнений в Date","3-normalization-overflow-in-date",{"id":32,"value":33,"isTypeParagraph":8},"10621","При создании даты из числовых компонентов переполненные значения обычно “переносятся” (carry/borrow): лишние месяцы увеличивают год, значение дня 0 дает последний день предыдущего месяца, отрицательные значения уменьшают старшие компоненты.\n\nЭто позволяет преобразовать \"21.13.2002\" в \"21.01.2003\" без ручных вычислений: 13-й месяц становится январем следующего года при переносе.\n",{"id":35,"value":36,"anchor":37,"isTypeH3":8},"4656","Почему выбран UTC (а не local time)","why-utc-not-local-time",{"id":39,"value":40,"isTypeParagraph":8},"10622","Если создать дату как local time и затем форматировать ее, результат может зависеть от часового пояса и переходов на летнее/зимнее время, что иногда приводит к “сдвигам” при преобразованиях.\n\nДля “чистых календарных дат” (без времени) стабильнее придерживаться UTC: создание через `Date.UTC` и форматирование через `getUTC*`.",{"id":42,"value":43,"anchor":44,"isTypeH2":8},"4617","Схема преобразования","schema-logic",{"id":46,"value":47,"isTypeParagraph":8},"10623","- Вход: \"dd.mm.yyyy\".\n- Шаг 1: выделение dd, mm, yyyy (regex).\n- Шаг 2: построение UTC-даты `new Date(Date.UTC(yyyy, mm - 1, dd))` (автонормализация).\n- Шаг 3: число для сортировки: `time = date.getTime()`.\n- Шаг 4: сортировка по убыванию time.\n- Шаг 5: форматирование результата в \"dd.mm.yyyy\" через `getUTC*` и `padStart(2, \"0\")`.",{"id":49,"value":50,"anchor":51,"isTypeH2":8},"4618","Таблица: частые ошибки и решения","table-common-mistakes-and-fixes",{"id":53,"value":54,"isTypeParagraph":8},"10624","| Ошибка | Почему плохо | Как правильно |\n|------|--------------|--------------|\n| `new Date(\"10.01.2017\")` | Нестандартный формат, возможны различия интерпретации | Разбирать dd/mm/yyyy вручную и создавать дату из чисел |\n| Месяц передается как 1..12 в конструктор из компонентов | В Date месяц обычно 0..11 | Использовать `month - 1` |\n| Форматирование через local getters | Возможна зависимость от часового пояса | Для “календарных дат” использовать `getUTC*` |\n| Потеря ведущих нулей | \"5.1.2017\" не соответствует требуемому виду | Использовать `padStart(2, \"0\")` |",{"id":56,"value":57,"isTypeParagraph":8},"10625","Кратко: необходимо разобрать \"dd.mm.yyyy\" на числа, создать дату через `Date.UTC` (что автоматически нормализует 13-й месяц), отсортировать по `getTime()` по убыванию и отформатировать обратно через UTC-геттеры с ведущими нулями.",{"id":59,"functionTestData":60,"functionName":89,"functionTemplateCode":90,"solution":91,"description":92},"422",[61,75],[62,70],[63],[64,66,68],{"date":65},"05.11.2016",{"date":67},"21.13.2002",{"date":69},"10.01.2017",[71,72,73],{"date":69},{"date":65},{"date":74},"21.01.2003",[76,84],[77],[78,80,82],{"date":79},"10.01.1997",{"date":81},"05.11.1981",{"date":83},"21.13.2004",[85,87,88],{"date":86},"21.01.2005",{"date":79},{"date":81},"sortDates","function sortDates(dates) {\n    // ваш код здесь\n}","Сегменты (год, месяц, день) следует передавать как числа в `Date.UTC(year, monthIndex, day)`, затем сортировку выполнять по `getTime()` по убыванию, а результат форматировать обратно в \"dd.mm.yyyy\" через UTC-геттеры.\n\nНормализация работает автоматически: если компонент выходит за допустимые границы, значение “переносится” в старшие компоненты (например, месяц больше 12 увеличивает год, а день 0 дает последний день предыдущего месяца).\n\n```\nfunction sortDates(items) {\n  const mapped = items.map((item, index) => {\n    const dt = parseDMYToUTCDate(item.date);\n\n    if (!dt) {\n      return {\n        index,\n        time: Number.NEGATIVE_INFINITY,\n        normalized: item.date,\n        original: item\n      };\n    }\n\n    return {\n      index,\n      time: dt.getTime(),\n      normalized: formatDMYFromUTCDate(dt),\n      original: item\n    };\n  });\n\n  mapped.sort((a, b) => {\n    if (b.time !== a.time) return b.time - a.time;\n    return a.index - b.index;\n  });\n\n  return mapped.map(x => ({ ...x.original, date: x.normalized }));\n}\n\nfunction parseDMYToUTCDate(s) {\n  const m = /^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/.exec(String(s));\n  if (!m) return null;\n\n  const day = Number(m[1]);\n  const month = Number(m[2]);\n  const year = Number(m[3]);\n\n  const dt = new Date(Date.UTC(year, month - 1, day));\n  if (Number.isNaN(dt.getTime())) return null;\n\n  return dt;\n}\n\nfunction formatDMYFromUTCDate(dt) {\n  const dd = String(dt.getUTCDate()).padStart(2, \"0\");\n  const mm = String(dt.getUTCMonth() + 1).padStart(2, \"0\");\n  const yyyy = String(dt.getUTCFullYear()).padStart(4, \"0\");\n  return `${dd}.${mm}.${yyyy}`;\n}\n```\n\nЧтобы сортировка не зависела от локального часового пояса, удобнее строить дату через `Date.UTC(...)` и форматировать через `getUTCDate()`, `getUTCMonth()`, `getUTCFullYear()`. Тогда “календарная дата” будет стабильной и при запуске на разных машинах.","Дан массив:\n\n```\nconst dates = [\n  { date: \"10.01.2017\" },\n  { date: \"05.11.2016\" },\n  { date: \"21.13.2002\" },\n]\n```\n\nНеобходимо отсортировать массив по убыванию дат.\n\nПримеры:\n\n```\nsortDates([\n    {\"date\": \"05.11.2016\"},\n    {\"date\": \"21.13.2002\"},\n    {\"date\": \"10.01.2017\"},\n]) --> [\n    {\"date\": \"10.01.2017\"},\n    {\"date\": \"05.11.2016\"},\n    {\"date\": \"21.01.2003\"}\n]\n```\n\n```\nsortDates([\n    {\"date\": \"10.01.1997\"},\n    {\"date\": \"05.11.1981\"},\n    {\"date\": \"21.13.2004\"}\n]) --> [\n    {\"date\": \"21.01.2005\"},\n    {\"date\": \"10.01.1997\"},\n    {\"date\": \"05.11.1981\"}\n]\n```","livecoding",{"title":95,"description":96,"ogTitle":97,"ogDescription":96,"ogImageUrl":98,"canonical":99,"ogLocale":100,"ogSiteName":101,"ogImageType":102,"ogImageWidth":103,"ogImageHeight":104,"ogType":105,"ogUrl":99},"Отсортировать массив объектов с датами по датам","[{date: '10.01.2017'}, {date: '05.11.2016'}, {date: '21.13.2002'}];","Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по убыванию","/og-image.png",null,"ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":107,"siteUrl":108},"GOOD WEB JOB!","https://goodwebjob.ru",[110],{"label":111,"slug":112,"to":113},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":115,"navigationSublist":124},[116,120],{"path":113,"isActive":117,"name":118,"icon":119,"isNavbarMobileDisabled":8},false,"С чего начать?","material-symbols:visibility-outline-rounded",{"path":121,"isActive":8,"name":122,"icon":123,"isNavbarMobileDisabled":117},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[125,134,161,173,179,320,344,353,359,422,443,449],{"title":126,"list":127,"isOpened":117},"Bash",[128,131],{"name":129,"path":130,"isActive":117},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":132,"path":133,"isActive":117},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":135,"list":136,"isOpened":117},"CSS",[137,140,143,146,149,152,155,158],{"name":138,"path":139,"isActive":117},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":141,"path":142,"isActive":117},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":144,"path":145,"isActive":117},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":147,"path":148,"isActive":117},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":150,"path":151,"isActive":117},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":153,"path":154,"isActive":117},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":156,"path":157,"isActive":117},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":159,"path":160,"isActive":117},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":162,"list":163,"isOpened":117},"Git",[164,167,170],{"name":165,"path":166,"isActive":117},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/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":168,"path":169,"isActive":117},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":171,"path":172,"isActive":117},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":174,"list":175,"isOpened":117},"HTML",[176],{"name":177,"path":178,"isActive":117},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":180,"list":181,"isOpened":117},"JavaScript",[182,185,188,191,194,197,200,203,206,209,212,215,218,221,224,227,230,233,236,239,242,245,248,251,254,257,260,263,266,269,272,275,278,281,284,287,290,293,296,299,302,305,308,311,314,317],{"name":183,"path":184,"isActive":117},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":186,"path":187,"isActive":117},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":189,"path":190,"isActive":117},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":192,"path":193,"isActive":117},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":195,"path":196,"isActive":117},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":198,"path":199,"isActive":117},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":201,"path":202,"isActive":117},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","/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":204,"path":205,"isActive":117},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":207,"path":208,"isActive":117},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":210,"path":211,"isActive":117},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":213,"path":214,"isActive":117},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":216,"path":217,"isActive":117},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":219,"path":220,"isActive":117},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":222,"path":223,"isActive":117},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":225,"path":226,"isActive":117},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":228,"path":229,"isActive":117},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":231,"path":232,"isActive":117},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":234,"path":235,"isActive":117},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":237,"path":238,"isActive":117},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":240,"path":241,"isActive":117},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":243,"path":244,"isActive":117},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":246,"path":247,"isActive":117},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":249,"path":250,"isActive":117},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":252,"path":253,"isActive":117},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":255,"path":256,"isActive":117},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":258,"path":259,"isActive":117},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":261,"path":262,"isActive":117},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":264,"path":265,"isActive":117},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":267,"path":268,"isActive":117},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","/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":270,"path":271,"isActive":117},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","/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":273,"path":274,"isActive":117},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":276,"path":277,"isActive":117},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":279,"path":280,"isActive":117},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":282,"path":283,"isActive":117},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":285,"path":286,"isActive":117},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":288,"path":289,"isActive":117},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":291,"path":292,"isActive":117}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":294,"path":295,"isActive":117},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":297,"path":298,"isActive":117},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":300,"path":301,"isActive":117},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":303,"path":304,"isActive":117},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":306,"path":307,"isActive":117},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":309,"path":310,"isActive":117},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":312,"path":313,"isActive":117},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":315,"path":316,"isActive":117},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":318,"path":319,"isActive":117},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","/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":321,"list":322,"isOpened":117},"React",[323,326,329,332,335,338,341],{"name":324,"path":325,"isActive":117},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":327,"path":328,"isActive":117},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":330,"path":331,"isActive":117},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":333,"path":334,"isActive":117},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":336,"path":337,"isActive":117},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","/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":339,"path":340,"isActive":117},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":342,"path":343,"isActive":117},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/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":345,"list":346,"isOpened":117},"Алгоритмы",[347,350],{"name":348,"path":349,"isActive":117},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":351,"path":352,"isActive":117},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":354,"list":355,"isOpened":117},"Дебаггинг",[356],{"name":357,"path":358,"isActive":117},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/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":360,"list":361,"isOpened":117},"Компьютерные сети",[362,365,368,371,374,377,380,383,386,389,392,395,398,401,404,407,410,413,416,419],{"name":363,"path":364,"isActive":117},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":366,"path":367,"isActive":117},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":369,"path":370,"isActive":117},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":372,"path":373,"isActive":117},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":375,"path":376,"isActive":117},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":378,"path":379,"isActive":117},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":381,"path":382,"isActive":117},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":384,"path":385,"isActive":117},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":387,"path":388,"isActive":117},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":390,"path":391,"isActive":117},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":393,"path":394,"isActive":117},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":396,"path":397,"isActive":117},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/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":399,"path":400,"isActive":117},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":402,"path":403,"isActive":117},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":405,"path":406,"isActive":117},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":408,"path":409,"isActive":117},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/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":411,"path":412,"isActive":117},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":414,"path":415,"isActive":117},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","/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":417,"path":418,"isActive":117},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","/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":420,"path":421,"isActive":117},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":423,"list":424,"isOpened":117},"Отрисовка в браузере",[425,428,431,434,437,440],{"name":426,"path":427,"isActive":117},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":429,"path":430,"isActive":117},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":432,"path":433,"isActive":117},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":435,"path":436,"isActive":117},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":438,"path":439,"isActive":117},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":441,"path":442,"isActive":117},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":444,"list":445,"isOpened":117},"Ревью кода",[446],{"name":447,"path":448,"isActive":117},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":450,"list":451,"isOpened":117},"Теория вероятности",[452,455,458],{"name":453,"path":454,"isActive":117},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/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":456,"path":457,"isActive":117},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/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":459,"path":460,"isActive":117},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","/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",{"slugs":462},[463,466,468,470,472,475,478,480,482,484,486,488,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667,669,671,672,674,676,678,680],{"name":464,"value":465},"Теоретические задания","theoretical-tasks",{"name":219,"value":467},"what-this-code-will-return-typeof-function",{"name":118,"value":469},"where-to-begin",{"name":186,"value":471},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":473,"value":474},"Backend","backend",{"name":476,"value":477},"Frontend","frontend",{"name":183,"value":479},"prototype-what-logical-values-will-be-received-in-console-log",{"name":300,"value":481},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":291,"value":483},"find-non-repeating-numbers-in-an-array",{"name":264,"value":485},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":270,"value":487},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":489,"value":490},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":276,"value":492},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":192,"value":494},"what-value-will-the-console-output-with-object-property",{"name":195,"value":496},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":267,"value":498},"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":297,"value":500},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":303,"value":502},"determines-whether-a-word-is-a-palindrome",{"name":282,"value":504},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":309,"value":506},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":273,"value":508},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":279,"value":510},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":285,"value":512},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":318,"value":514},"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":288,"value":516},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":294,"value":518},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":198,"value":520},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":201,"value":522},"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":213,"value":524},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":216,"value":526},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":315,"value":528},"unifying-values-in-an-array",{"name":306,"value":530},"flattening-the-array",{"name":204,"value":532},"what-will-the-book-get-upper-name-method-return",{"name":312,"value":534},"string-compression",{"name":210,"value":536},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":222,"value":538},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":363,"value":540},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":369,"value":542},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":372,"value":544},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":375,"value":546},"key-differences-between-tcp-and-udp",{"name":378,"value":548},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":381,"value":550},"what-is-http-and-what-does-it-consist-of",{"name":384,"value":552},"what-are-http-headers-and-why-do-we-need-them",{"name":387,"value":554},"what-are-http-parameters",{"name":390,"value":556},"where-is-the-html-code-located-in-the-http-response-structure",{"name":177,"value":558},"what-is-html",{"name":393,"value":560},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":396,"value":562},"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":399,"value":564},"what-is-a-cookie",{"name":402,"value":566},"who-initiates-the-cookie-recording-in-the-browser",{"name":405,"value":568},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":570,"value":93},"Лайвкодинг",{"name":189,"value":572},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":411,"value":574},"is-everything-that-goes-through-https-secure",{"name":414,"value":576},"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":417,"value":578},"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":429,"value":580},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":426,"value":582},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":432,"value":584},"what-is-blocking-the-page-rendering-in-the-browser",{"name":435,"value":586},"what-is-dom-in-a-browser-what-is-cssom",{"name":438,"value":588},"what-are-nodes-in-the-dom",{"name":441,"value":590},"what-does-cssom-consist-of",{"name":138,"value":592},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":141,"value":594},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":144,"value":596},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":147,"value":598},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":150,"value":600},"there-is-an-html-code-will-font-weight-affect-span",{"name":153,"value":602},"what-are-the-differences-between-flexbox-and-grid",{"name":156,"value":604},"do-flexbox-and-grid-replace-each-other",{"name":159,"value":606},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":122,"value":608},"tasks",{"name":225,"value":610},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":228,"value":612},"what-is-this-in-javascript",{"name":231,"value":614},"what-is-an-event-loop-and-how-does-it-work",{"name":234,"value":616},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":237,"value":618},"what-does-the-typeof-operator-show-in-javascript",{"name":240,"value":620},"what-types-of-data-exist-in-javascript",{"name":243,"value":622},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":246,"value":624},"what-will-typeof-return-for-an-array",{"name":249,"value":626},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":252,"value":628},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":255,"value":630},"what-does-typeof-return-for-new-set-in-javascript",{"name":324,"value":632},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":330,"value":634},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":333,"value":636},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":336,"value":638},"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":339,"value":640},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":357,"value":642},"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":165,"value":644},"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":168,"value":646},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":171,"value":648},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":447,"value":650},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":129,"value":652},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":132,"value":654},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":348,"value":656},"what-is-algorithmic-complexity",{"name":351,"value":658},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":258,"value":660},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":420,"value":662},"how-can-a-user-be-authorized-on-a-website",{"name":261,"value":664},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":453,"value":666},"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":456,"value":668},"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":459,"value":670},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":111,"value":112},{"name":408,"value":673},"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":366,"value":675},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":207,"value":677},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":327,"value":679},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":342,"value":681},"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",{"cooperation":683,"copyright":686,"reportError":687,"socialNetwork":689},{"link":684,"title":685},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":688,"link":684},"Сообщить об ошибке",{"label":690,"socialNetworkList":691},"Мы в соцсетях:",[692,695,698],{"icon":99,"link":693,"title":694},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":696,"link":684,"title":697},"ic:baseline-telegram","Telegram",{"icon":699,"link":700,"title":701},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":703,"body":704},{},{"type":705,"children":706},"root",[707,715,728,733,738,747],{"type":708,"tag":709,"props":710,"children":711},"element","p",{},[712],{"type":713,"value":714},"text","Дан массив:",{"type":708,"tag":716,"props":717,"children":721},"pre",{"className":718,"code":720,"language":713},[719],"language-text","const dates = [\n  { date: \"10.01.2017\" },\n  { date: \"05.11.2016\" },\n  { date: \"21.13.2002\" },\n]\n",[722],{"type":708,"tag":723,"props":724,"children":726},"code",{"__ignoreMap":725},"",[727],{"type":713,"value":720},{"type":708,"tag":709,"props":729,"children":730},{},[731],{"type":713,"value":732},"Необходимо отсортировать массив по убыванию дат.",{"type":708,"tag":709,"props":734,"children":735},{},[736],{"type":713,"value":737},"Примеры:",{"type":708,"tag":716,"props":739,"children":742},{"className":740,"code":741,"language":713},[719],"sortDates([\n    {\"date\": \"05.11.2016\"},\n    {\"date\": \"21.13.2002\"},\n    {\"date\": \"10.01.2017\"},\n]) --> [\n    {\"date\": \"10.01.2017\"},\n    {\"date\": \"05.11.2016\"},\n    {\"date\": \"21.01.2003\"}\n]\n",[743],{"type":708,"tag":723,"props":744,"children":745},{"__ignoreMap":725},[746],{"type":713,"value":741},{"type":708,"tag":716,"props":748,"children":751},{"className":749,"code":750,"language":713},[719],"sortDates([\n    {\"date\": \"10.01.1997\"},\n    {\"date\": \"05.11.1981\"},\n    {\"date\": \"21.13.2004\"}\n]) --> [\n    {\"date\": \"21.01.2005\"},\n    {\"date\": \"10.01.1997\"},\n    {\"date\": \"05.11.1981\"}\n]\n",[752],{"type":708,"tag":723,"props":753,"children":754},{"__ignoreMap":725},[755],{"type":713,"value":750},{"data":757,"body":758},{},{"type":705,"children":759},[760,765],{"type":708,"tag":709,"props":761,"children":762},{},[763],{"type":713,"value":764},"Строка \"dd.mm.yyyy\" при обычной сортировке строк сравнивает символы слева направо, поэтому лексикографический порядок не совпадает с хронологическим порядком дат.",{"type":708,"tag":709,"props":766,"children":767},{},[768],{"type":713,"value":769},"Корректная сортировка требует привести дату либо к числу (timestamp), либо к строке формата, где порядок символов соответствует времени (например, \"yyyy-mm-dd\").",{"data":771,"body":772},{},{"type":705,"children":773},[774,779],{"type":708,"tag":709,"props":775,"children":776},{},[777],{"type":713,"value":778},"Парсинг не-ISO форматов строк не гарантирован одинаково во всех реализациях, поэтому надежнее выделить dd, mm, yyyy регулярным выражением и преобразовать в числа.",{"type":708,"tag":709,"props":780,"children":781},{},[782,784,790],{"type":713,"value":783},"Регулярное выражение ",{"type":708,"tag":723,"props":785,"children":787},{"className":786},[],[788],{"type":713,"value":789},"^(\\d{2})\\.(\\d{2})\\.(\\d{4})$",{"type":713,"value":791}," гарантирует строго нужный формат, что упрощает обработку ошибок.",{"data":793,"body":794},{},{"type":705,"children":795},[796,801],{"type":708,"tag":709,"props":797,"children":798},{},[799],{"type":713,"value":800},"При создании даты из числовых компонентов переполненные значения обычно “переносятся” (carry/borrow): лишние месяцы увеличивают год, значение дня 0 дает последний день предыдущего месяца, отрицательные значения уменьшают старшие компоненты.",{"type":708,"tag":709,"props":802,"children":803},{},[804],{"type":713,"value":805},"Это позволяет преобразовать \"21.13.2002\" в \"21.01.2003\" без ручных вычислений: 13-й месяц становится январем следующего года при переносе.",{"data":807,"body":808},{},{"type":705,"children":809},[810,815],{"type":708,"tag":709,"props":811,"children":812},{},[813],{"type":713,"value":814},"Если создать дату как local time и затем форматировать ее, результат может зависеть от часового пояса и переходов на летнее/зимнее время, что иногда приводит к “сдвигам” при преобразованиях.",{"type":708,"tag":709,"props":816,"children":817},{},[818,820,826,828,834],{"type":713,"value":819},"Для “чистых календарных дат” (без времени) стабильнее придерживаться UTC: создание через ",{"type":708,"tag":723,"props":821,"children":823},{"className":822},[],[824],{"type":713,"value":825},"Date.UTC",{"type":713,"value":827}," и форматирование через ",{"type":708,"tag":723,"props":829,"children":831},{"className":830},[],[832],{"type":713,"value":833},"getUTC*",{"type":713,"value":835},".",{"data":837,"body":838},{},{"type":705,"children":839},[840],{"type":708,"tag":841,"props":842,"children":843},"ul",{},[844,850,855,868,880,885],{"type":708,"tag":845,"props":846,"children":847},"li",{},[848],{"type":713,"value":849},"Вход: \"dd.mm.yyyy\".",{"type":708,"tag":845,"props":851,"children":852},{},[853],{"type":713,"value":854},"Шаг 1: выделение dd, mm, yyyy (regex).",{"type":708,"tag":845,"props":856,"children":857},{},[858,860,866],{"type":713,"value":859},"Шаг 2: построение UTC-даты ",{"type":708,"tag":723,"props":861,"children":863},{"className":862},[],[864],{"type":713,"value":865},"new Date(Date.UTC(yyyy, mm - 1, dd))",{"type":713,"value":867}," (автонормализация).",{"type":708,"tag":845,"props":869,"children":870},{},[871,873,879],{"type":713,"value":872},"Шаг 3: число для сортировки: ",{"type":708,"tag":723,"props":874,"children":876},{"className":875},[],[877],{"type":713,"value":878},"time = date.getTime()",{"type":713,"value":835},{"type":708,"tag":845,"props":881,"children":882},{},[883],{"type":713,"value":884},"Шаг 4: сортировка по убыванию time.",{"type":708,"tag":845,"props":886,"children":887},{},[888,890,895,897,903],{"type":713,"value":889},"Шаг 5: форматирование результата в \"dd.mm.yyyy\" через ",{"type":708,"tag":723,"props":891,"children":893},{"className":892},[],[894],{"type":713,"value":833},{"type":713,"value":896}," и ",{"type":708,"tag":723,"props":898,"children":900},{"className":899},[],[901],{"type":713,"value":902},"padStart(2, \"0\")",{"type":713,"value":835},{"data":905,"body":906},{},{"type":705,"children":907},[908],{"type":708,"tag":909,"props":910,"children":911},"table",{},[912,936],{"type":708,"tag":913,"props":914,"children":915},"thead",{},[916],{"type":708,"tag":917,"props":918,"children":919},"tr",{},[920,926,931],{"type":708,"tag":921,"props":922,"children":923},"th",{},[924],{"type":713,"value":925},"Ошибка",{"type":708,"tag":921,"props":927,"children":928},{},[929],{"type":713,"value":930},"Почему плохо",{"type":708,"tag":921,"props":932,"children":933},{},[934],{"type":713,"value":935},"Как правильно",{"type":708,"tag":937,"props":938,"children":939},"tbody",{},[940,963,987,1010],{"type":708,"tag":917,"props":941,"children":942},{},[943,953,958],{"type":708,"tag":944,"props":945,"children":946},"td",{},[947],{"type":708,"tag":723,"props":948,"children":950},{"className":949},[],[951],{"type":713,"value":952},"new Date(\"10.01.2017\")",{"type":708,"tag":944,"props":954,"children":955},{},[956],{"type":713,"value":957},"Нестандартный формат, возможны различия интерпретации",{"type":708,"tag":944,"props":959,"children":960},{},[961],{"type":713,"value":962},"Разбирать dd/mm/yyyy вручную и создавать дату из чисел",{"type":708,"tag":917,"props":964,"children":965},{},[966,971,976],{"type":708,"tag":944,"props":967,"children":968},{},[969],{"type":713,"value":970},"Месяц передается как 1..12 в конструктор из компонентов",{"type":708,"tag":944,"props":972,"children":973},{},[974],{"type":713,"value":975},"В Date месяц обычно 0..11",{"type":708,"tag":944,"props":977,"children":978},{},[979,981],{"type":713,"value":980},"Использовать ",{"type":708,"tag":723,"props":982,"children":984},{"className":983},[],[985],{"type":713,"value":986},"month - 1",{"type":708,"tag":917,"props":988,"children":989},{},[990,995,1000],{"type":708,"tag":944,"props":991,"children":992},{},[993],{"type":713,"value":994},"Форматирование через local getters",{"type":708,"tag":944,"props":996,"children":997},{},[998],{"type":713,"value":999},"Возможна зависимость от часового пояса",{"type":708,"tag":944,"props":1001,"children":1002},{},[1003,1005],{"type":713,"value":1004},"Для “календарных дат” использовать ",{"type":708,"tag":723,"props":1006,"children":1008},{"className":1007},[],[1009],{"type":713,"value":833},{"type":708,"tag":917,"props":1011,"children":1012},{},[1013,1018,1023],{"type":708,"tag":944,"props":1014,"children":1015},{},[1016],{"type":713,"value":1017},"Потеря ведущих нулей",{"type":708,"tag":944,"props":1019,"children":1020},{},[1021],{"type":713,"value":1022},"\"5.1.2017\" не соответствует требуемому виду",{"type":708,"tag":944,"props":1024,"children":1025},{},[1026,1027],{"type":713,"value":980},{"type":708,"tag":723,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":713,"value":902},{"data":1033,"body":1034},{},{"type":705,"children":1035},[1036],{"type":708,"tag":709,"props":1037,"children":1038},{},[1039,1041,1046,1048,1054],{"type":713,"value":1040},"Кратко: необходимо разобрать \"dd.mm.yyyy\" на числа, создать дату через ",{"type":708,"tag":723,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":713,"value":825},{"type":713,"value":1047}," (что автоматически нормализует 13-й месяц), отсортировать по ",{"type":708,"tag":723,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":713,"value":1053},"getTime()",{"type":713,"value":1055}," по убыванию и отформатировать обратно через UTC-геттеры с ведущими нулями.",1775575822642]