[{"data":1,"prerenderedAt":1201},["ShallowReactive",2],{"$fz2cJQwc11bYwdYzuTE04_oVtTbe5X2yj694Gqd1Tbfk":3,"$f-KhKwB8J0md5Q3U1oyqNCQbHxVpirjaanlJWCGo_ht4":99,"$fkVWEWXZHbLy86BhC78gDVDJ_00TY4k_DsdZD3Mz6ZO0":102,"$fqGwjmVbyPxmA5lnsLz9nF3m-ncS8WzLIlTsTA85cuZA":107,"$fVMSX_HWVzVkzv-u5ATHiOgClblPaIGZfXUn_Cq8LKn4":453,"$fw0tI3d-iV2W3zZtbRjyPNNRSgXGobrmwsMU7a1fynls":674,"mdc--h4z2bo-key":694,"mdc-22dwl2-key":757,"mdc--h651it-key":790,"mdc--fp77t-key":822,"mdc-y7hqqj-key":872,"mdc--i7qogx-key":1019,"mdc-2anah-key":1119,"mdc-wigbn4-key":1150},{"content":4,"livecodingContent":51,"type":87,"pageMeta":88},[5,9,13,16,20,23,27,30,34,37,41,44,48],{"id":6,"value":7,"isTypeH1":8},"1992","Напишите код, который сделает из массива объект",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4635","Теория по задаче","theory-of-the-task",{"id":14,"value":15,"isTypeParagraph":8},"10684","Преобразование «массив → объект» означает, что множество элементов объединяется в одну структуру, где доступ к данным идёт по ключу. В этой задаче каждый элемент массива описывает одно свойство: `name` — имя свойства, `value` — значение свойства. Поэтому базовая операция выглядит как присваивание по вычисляемому ключу: `result[name] = value`.",{"id":17,"value":18,"anchor":19,"isTypeH3":8},"4692","Почему работает Object.fromEntries","why-objectfromentries-works",{"id":21,"value":22,"isTypeParagraph":8},"10685","`Object.fromEntries()` создаёт объект из набора пар вида `[ключ, значение]`. Поэтому задача удобно решается через промежуточное представление в виде пар.\n\n```\n// 1) Преобразование элемента в пару:\n{ name: \"width\", value: 10 }  ->  [\"width\", 10]\n\n// 2) Сборка объекта из пар:\n[ [\"width\", 10], [\"height\", 20] ]  ->  { width: 10, height: 20 }\u003C/code>\u003C/pre>\n\nСхема потока данных:\n\n\u003Cpre>\u003Ccode>[ {name, value}, {name, value}, ... ]\n          |\n          | map: ({name,value}) => [name,value]\n          v\n[ [name, value], [name, value], ... ]\n          |\n          | Object.fromEntries\n          v\n{ [name]: value, [name]: value, ... }\n```",{"id":24,"value":25,"anchor":26,"isTypeH3":8},"4693","Почему работает reduce","why-reduce-works",{"id":28,"value":29,"isTypeParagraph":8},"10686","`reduce()` «сворачивает» массив к одному результату. В качестве результата удобно выбрать объект, а затем постепенно добавлять в него свойства.\n\nМини-схема итераций:\n\n```\nacc = {}\nэлемент 1: acc[name1] = value1  -> acc = { name1: value1 }\nэлемент 2: acc[name2] = value2  -> acc = { name1: value1, name2: value2 }\n...\n```\n\nВажно понимать роль `initialValue`: когда оно равно `{}`, аккумулятор с первой итерации является объектом результата.",{"id":31,"value":32,"anchor":33,"isTypeH3":8},"4694","Как выбрать подход","how-to-choose-an-approach",{"id":35,"value":36,"isTypeParagraph":8},"10687","Выбор обычно зависит от читаемости и необходимости дополнительных проверок.\n\n| Подход | Короткость кода | Читаемость новичку | Удобство проверок |\n|---|---:|---:|---:|\n| `Object.fromEntries + map` | Высокая | Средняя | Средняя |\n| `reduce` | Средняя | Средняя | Высокая |\n| `for...of` | Низкая/средняя | Высокая | Высокая |\n| `Object.create(null)` | Средняя | Средняя | Высокая |\n",{"id":38,"value":39,"anchor":40,"isTypeH2":8},"4636","Крайние случаи и типичные ошибки","edge-cases-and-common-mistakes",{"id":42,"value":43,"isTypeParagraph":8},"10688","- Повтор ключей (`name` одинаковый): будет перезапись, поэтому сохранится значение из последнего элемента с таким `name`.\n- Пустой массив: корректным результатом является пустой объект `{}`.\n- Значения `0`, `false`, `\"\"`, `null`: это допустимые значения, они должны сохраняться без попыток «отфильтровать пустое».\n- Неожиданная форма элементов: если элемент без `name` или `name` не строка, уместно выбрасывать `TypeError`, чтобы ошибка обнаруживалась рядом с источником данных.",{"id":45,"description":46,"titleAlert":47,"isTypeAlertWarning":8},"783","Проверка вида `if (value)` для этой задачи является типичной ошибкой, потому что `0` и `\"\"` являются корректными значениями, но считаются «ложными» в условиях.",null,{"id":49,"value":50,"isTypeParagraph":8},"10689","Кратко: задача решается созданием объекта, где ключом становится `name`, а значением — `value`; удобные реализации: `Object.fromEntries(arr.map(...))`, `arr.reduce(..., {})` или цикл `for...of`. Для надёжности полезно помнить про перезапись при одинаковых ключах и не отбрасывать значения вроде `0`.",{"id":52,"functionTestData":53,"functionName":83,"functionTemplateCode":84,"solution":85,"description":86},"433",[54,64,74],[55,63],[56],[57,60],{"name":58,"value":59},"width",10,{"name":61,"value":62},"height",20,{"width":59,"height":62},[65,73],[66],[67,70],{"name":68,"value":69},"x",100,{"name":71,"value":72},"y",200,{"x":69,"y":72},[75,82],[76],[77,80],{"name":78,"value":79},"size",0,{"name":81,"value":59},"weight",{"size":79,"weight":59},"mapArrInObj","function mapArrInObj(arr) {\n    // ваш код здесь\n}","**Вариант 1**: через Object.fromEntries (самый лаконичный)\n\nСмысл подхода: каждый элемент `{ name, value }` преобразуется в пару `[name, value]`, затем эти пары превращаются в объект.\n\n```\nfunction mapArrInObj(arr) {\n  return Object.fromEntries(arr.map(({ name, value }) => [name, value]));\n}\n```\n\n**Вариант 2**: через reduce (классический способ с аккумулятором)\nОбъект результата выступает аккумулятором, который дополняется на каждой итерации.\n\n\nДля `reduce` важно задавать начальное значение аккумулятора `{}`, иначе аккумулятором может стать первый элемент массива, а на пустом массиве поведение может оказаться нежелательным.\n\n```\nfunction mapArrInObj(arr) {\n  return arr.reduce((acc, { name, value }) => {\n    acc[name] = value;\n    return acc;\n  }, {});\n}\n```\n\n**Вариант 3**: через цикл for...of\n\nЭто прямолинейная реализация: создаётся пустой объект, затем выполняется проход по массиву и запись значений.\n\n```\nfunction mapArrInObj(arr) {\n  const result = {};\n  for (const item of arr) {\n    result[item.name] = item.value;\n  }\n  return result;\n}\n```\n\n**Вариант 4**: объект без прототипа (для «сложных» ключей)\nЕсли ключи потенциально конфликтуют со встроенными свойствами, может помочь объект без прототипа: `Object.create(null)`.\n\n```\nfunction mapArrInObj(arr) {\n  const result = Object.create(null);\n  for (const { name, value } of arr) {\n    result[name] = value;\n  }\n  return result;\n}\n```","Дан массив объектов:\n\n```\nconst arr = [\n  { name: \"width\", value: 10 },\n  { name: \"height\", value: 20 },\n];\n```\n\nНеобходимо сделать из массива объект.\n\nПримеры:\n\n```\nmapArrInObj([\n  { name: \"width\", value: 10 },\n  { name: \"height\", value: 20 }\n]) --> { width: 10, height: 20 }\n```\n\n```\nmapArrInObj([\n    { name: \"x\", value: 100 },\n    { name: \"y\", value: 200 }\n]) --> { x: 100, y: 200 }\n```\n\n```\nmapArrInObj([\n    { name: \"size\", value: 0 },\n    { name: \"weight\", value: 10 }\n]) --> { size: 0, weight: 10 }\n```","livecoding",{"title":89,"description":90,"ogTitle":89,"ogDescription":91,"ogImageUrl":92,"canonical":47,"ogLocale":93,"ogSiteName":94,"ogImageType":95,"ogImageWidth":96,"ogImageHeight":97,"ogType":98,"ogUrl":47},"Напишите функцию, который сделает из массива объект","const arr = [\n {name: 'width', value: 10}, \n {name: 'height', value: 20}\n]\n\n// на выходе объект\n{width: 10, height: 20}","const arr = [  {name: 'width', value: 10},   {name: 'height', value: 20} ]  // на выходе объект {width: 10, height: 20}","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","website",{"siteName":100,"siteUrl":101},"GOOD WEB JOB!","https://goodwebjob.ru",[103],{"label":104,"slug":105,"to":106},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":108,"navigationSublist":117},[109,113],{"path":106,"isActive":110,"name":111,"icon":112,"isNavbarMobileDisabled":8},false,"С чего начать?","material-symbols:visibility-outline-rounded",{"path":114,"isActive":8,"name":115,"icon":116,"isNavbarMobileDisabled":110},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[118,127,154,166,172,312,336,345,351,414,435,441],{"title":119,"list":120,"isOpened":110},"Bash",[121,124],{"name":122,"path":123,"isActive":110},"Дан фрагмент 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":125,"path":126,"isActive":110},"Дан фрагмент 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":128,"list":129,"isOpened":110},"CSS",[130,133,136,139,142,145,148,151],{"name":131,"path":132,"isActive":110},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":134,"path":135,"isActive":110},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":137,"path":138,"isActive":110},"Есть шаблон вложенного 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":140,"path":141,"isActive":110},"Есть шаблон вложенного 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":143,"path":144,"isActive":110},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":146,"path":147,"isActive":110},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":149,"path":150,"isActive":110},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":152,"path":153,"isActive":110},"Есть 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":155,"list":156,"isOpened":110},"Git",[157,160,163],{"name":158,"path":159,"isActive":110},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/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":161,"path":162,"isActive":110},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":164,"path":165,"isActive":110},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":167,"list":168,"isOpened":110},"HTML",[169],{"name":170,"path":171,"isActive":110},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":173,"list":174,"isOpened":110},"JavaScript",[175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,288,291,294,297,300,303,306,309],{"name":176,"path":177,"isActive":110},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":179,"path":180,"isActive":110},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":182,"path":183,"isActive":110},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":185,"path":186,"isActive":110},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":188,"path":189,"isActive":110},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":191,"path":192,"isActive":110},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":194,"path":195,"isActive":110},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение 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":197,"path":198,"isActive":110},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":200,"path":201,"isActive":110},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":203,"path":204,"isActive":110},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":206,"path":207,"isActive":110},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":209,"path":210,"isActive":110},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":212,"path":213,"isActive":110},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":215,"path":216,"isActive":110},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":218,"path":219,"isActive":110},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":221,"path":222,"isActive":110},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":224,"path":225,"isActive":110},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":227,"path":228,"isActive":110},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":230,"path":231,"isActive":110},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":233,"path":234,"isActive":110},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":236,"path":237,"isActive":110},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":239,"path":240,"isActive":110},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":242,"path":243,"isActive":110},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":245,"path":246,"isActive":110},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":248,"path":249,"isActive":110},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":251,"path":252,"isActive":110},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":254,"path":255,"isActive":110},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":257,"path":258,"isActive":110},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":260,"path":261,"isActive":110},"Вернуть массив от 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":263,"path":264,"isActive":110},"Дана строка: '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":266,"path":267,"isActive":110},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":269,"path":270,"isActive":110},"Для каждого вложенного объекта нужно добавить свойство 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":272,"path":273,"isActive":110},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":275,"path":276,"isActive":110},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":278,"path":279,"isActive":110},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":281,"path":282,"isActive":110},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":284,"path":285,"isActive":110}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":89,"path":287,"isActive":110},"/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":289,"path":290,"isActive":110},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":292,"path":293,"isActive":110},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":295,"path":296,"isActive":110},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":298,"path":299,"isActive":110},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":301,"path":302,"isActive":110},"Реализовать функцию, принимающую аргументы \"*\", \"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":304,"path":305,"isActive":110},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":307,"path":308,"isActive":110},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":310,"path":311,"isActive":110},"Числа от 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":313,"list":314,"isOpened":110},"React",[315,318,321,324,327,330,333],{"name":316,"path":317,"isActive":110},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":319,"path":320,"isActive":110},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":322,"path":323,"isActive":110},"Если убрать в 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":325,"path":326,"isActive":110},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":328,"path":329,"isActive":110},"Есть код, в котором список и кнопка. Что в реальном 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":331,"path":332,"isActive":110},"Зачем нужен 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":334,"path":335,"isActive":110},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/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":337,"list":338,"isOpened":110},"Алгоритмы",[339,342],{"name":340,"path":341,"isActive":110},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":343,"path":344,"isActive":110},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":346,"list":347,"isOpened":110},"Дебаггинг",[348],{"name":349,"path":350,"isActive":110},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/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":352,"list":353,"isOpened":110},"Компьютерные сети",[354,357,360,363,366,369,372,375,378,381,384,387,390,393,396,399,402,405,408,411],{"name":355,"path":356,"isActive":110},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":358,"path":359,"isActive":110},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":361,"path":362,"isActive":110},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":364,"path":365,"isActive":110},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":367,"path":368,"isActive":110},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":370,"path":371,"isActive":110},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":373,"path":374,"isActive":110},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":376,"path":377,"isActive":110},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":379,"path":380,"isActive":110},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":382,"path":383,"isActive":110},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":385,"path":386,"isActive":110},"Чем отличаются 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":388,"path":389,"isActive":110},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/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":391,"path":392,"isActive":110},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":394,"path":395,"isActive":110},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":397,"path":398,"isActive":110},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":400,"path":401,"isActive":110},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/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":403,"path":404,"isActive":110},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":406,"path":407,"isActive":110},"Все данные зашифрованы, используется 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":409,"path":410,"isActive":110},"Есть веб-приложение. Помимо 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":412,"path":413,"isActive":110},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":415,"list":416,"isOpened":110},"Отрисовка в браузере",[417,420,423,426,429,432],{"name":418,"path":419,"isActive":110},"Что происходит, когда 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":421,"path":422,"isActive":110},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":424,"path":425,"isActive":110},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":427,"path":428,"isActive":110},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":430,"path":431,"isActive":110},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":433,"path":434,"isActive":110},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":436,"list":437,"isOpened":110},"Ревью кода",[438],{"name":439,"path":440,"isActive":110},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":442,"list":443,"isOpened":110},"Теория вероятности",[444,447,450],{"name":445,"path":446,"isActive":110},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/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":448,"path":449,"isActive":110},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/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":451,"path":452,"isActive":110},"Как гарантированно найти лёгкую фальшивую монету среди 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":454},[455,458,460,462,464,467,470,472,474,476,478,480,483,485,487,489,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,664,666,668,670,672],{"name":456,"value":457},"Теоретические задания","theoretical-tasks",{"name":212,"value":459},"what-this-code-will-return-typeof-function",{"name":111,"value":461},"where-to-begin",{"name":179,"value":463},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":465,"value":466},"Backend","backend",{"name":468,"value":469},"Frontend","frontend",{"name":176,"value":471},"prototype-what-logical-values-will-be-received-in-console-log",{"name":292,"value":473},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":284,"value":475},"find-non-repeating-numbers-in-an-array",{"name":257,"value":477},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":263,"value":479},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":481,"value":482},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":269,"value":484},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":185,"value":486},"what-value-will-the-console-output-with-object-property",{"name":188,"value":488},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":260,"value":490},"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":289,"value":492},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":295,"value":494},"determines-whether-a-word-is-a-palindrome",{"name":275,"value":496},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":301,"value":498},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":266,"value":500},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":272,"value":502},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":278,"value":504},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":310,"value":506},"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":281,"value":508},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":89,"value":510},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":191,"value":512},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":194,"value":514},"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":206,"value":516},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":209,"value":518},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":307,"value":520},"unifying-values-in-an-array",{"name":298,"value":522},"flattening-the-array",{"name":197,"value":524},"what-will-the-book-get-upper-name-method-return",{"name":304,"value":526},"string-compression",{"name":203,"value":528},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":215,"value":530},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":355,"value":532},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":361,"value":534},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":364,"value":536},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":367,"value":538},"key-differences-between-tcp-and-udp",{"name":370,"value":540},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":373,"value":542},"what-is-http-and-what-does-it-consist-of",{"name":376,"value":544},"what-are-http-headers-and-why-do-we-need-them",{"name":379,"value":546},"what-are-http-parameters",{"name":382,"value":548},"where-is-the-html-code-located-in-the-http-response-structure",{"name":170,"value":550},"what-is-html",{"name":385,"value":552},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":388,"value":554},"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":391,"value":556},"what-is-a-cookie",{"name":394,"value":558},"who-initiates-the-cookie-recording-in-the-browser",{"name":397,"value":560},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":562,"value":87},"Лайвкодинг",{"name":182,"value":564},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":403,"value":566},"is-everything-that-goes-through-https-secure",{"name":406,"value":568},"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":409,"value":570},"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":421,"value":572},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":418,"value":574},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":424,"value":576},"what-is-blocking-the-page-rendering-in-the-browser",{"name":427,"value":578},"what-is-dom-in-a-browser-what-is-cssom",{"name":430,"value":580},"what-are-nodes-in-the-dom",{"name":433,"value":582},"what-does-cssom-consist-of",{"name":131,"value":584},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":134,"value":586},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":137,"value":588},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":140,"value":590},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":143,"value":592},"there-is-an-html-code-will-font-weight-affect-span",{"name":146,"value":594},"what-are-the-differences-between-flexbox-and-grid",{"name":149,"value":596},"do-flexbox-and-grid-replace-each-other",{"name":152,"value":598},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":115,"value":600},"tasks",{"name":218,"value":602},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":221,"value":604},"what-is-this-in-javascript",{"name":224,"value":606},"what-is-an-event-loop-and-how-does-it-work",{"name":227,"value":608},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":230,"value":610},"what-does-the-typeof-operator-show-in-javascript",{"name":233,"value":612},"what-types-of-data-exist-in-javascript",{"name":236,"value":614},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":239,"value":616},"what-will-typeof-return-for-an-array",{"name":242,"value":618},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":245,"value":620},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":248,"value":622},"what-does-typeof-return-for-new-set-in-javascript",{"name":316,"value":624},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":322,"value":626},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":325,"value":628},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":328,"value":630},"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":331,"value":632},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":349,"value":634},"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":158,"value":636},"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":161,"value":638},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":164,"value":640},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":439,"value":642},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":122,"value":644},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":125,"value":646},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":340,"value":648},"what-is-algorithmic-complexity",{"name":343,"value":650},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":251,"value":652},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":412,"value":654},"how-can-a-user-be-authorized-on-a-website",{"name":254,"value":656},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":445,"value":658},"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":448,"value":660},"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":451,"value":662},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":104,"value":105},{"name":400,"value":665},"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":358,"value":667},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":200,"value":669},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":319,"value":671},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":334,"value":673},"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":675,"copyright":678,"reportError":679,"socialNetwork":681},{"link":676,"title":677},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":680,"link":676},"Сообщить об ошибке",{"label":682,"socialNetworkList":683},"Мы в соцсетях:",[684,687,690],{"icon":47,"link":685,"title":686},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":688,"link":676,"title":689},"ic:baseline-telegram","Telegram",{"icon":691,"link":692,"title":693},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":695,"body":696},{},{"type":697,"children":698},"root",[699,707,720,725,730,739,748],{"type":700,"tag":701,"props":702,"children":703},"element","p",{},[704],{"type":705,"value":706},"text","Дан массив объектов:",{"type":700,"tag":708,"props":709,"children":713},"pre",{"className":710,"code":712,"language":705},[711],"language-text","const arr = [\n  { name: \"width\", value: 10 },\n  { name: \"height\", value: 20 },\n];\n",[714],{"type":700,"tag":715,"props":716,"children":718},"code",{"__ignoreMap":717},"",[719],{"type":705,"value":712},{"type":700,"tag":701,"props":721,"children":722},{},[723],{"type":705,"value":724},"Необходимо сделать из массива объект.",{"type":700,"tag":701,"props":726,"children":727},{},[728],{"type":705,"value":729},"Примеры:",{"type":700,"tag":708,"props":731,"children":734},{"className":732,"code":733,"language":705},[711],"mapArrInObj([\n  { name: \"width\", value: 10 },\n  { name: \"height\", value: 20 }\n]) --> { width: 10, height: 20 }\n",[735],{"type":700,"tag":715,"props":736,"children":737},{"__ignoreMap":717},[738],{"type":705,"value":733},{"type":700,"tag":708,"props":740,"children":743},{"className":741,"code":742,"language":705},[711],"mapArrInObj([\n    { name: \"x\", value: 100 },\n    { name: \"y\", value: 200 }\n]) --> { x: 100, y: 200 }\n",[744],{"type":700,"tag":715,"props":745,"children":746},{"__ignoreMap":717},[747],{"type":705,"value":742},{"type":700,"tag":708,"props":749,"children":752},{"className":750,"code":751,"language":705},[711],"mapArrInObj([\n    { name: \"size\", value: 0 },\n    { name: \"weight\", value: 10 }\n]) --> { size: 0, weight: 10 }\n",[753],{"type":700,"tag":715,"props":754,"children":755},{"__ignoreMap":717},[756],{"type":705,"value":751},{"data":758,"body":759},{},{"type":697,"children":760},[761],{"type":700,"tag":701,"props":762,"children":763},{},[764,766,772,774,780,782,788],{"type":705,"value":765},"Преобразование «массив → объект» означает, что множество элементов объединяется в одну структуру, где доступ к данным идёт по ключу. В этой задаче каждый элемент массива описывает одно свойство: ",{"type":700,"tag":715,"props":767,"children":769},{"className":768},[],[770],{"type":705,"value":771},"name",{"type":705,"value":773}," — имя свойства, ",{"type":700,"tag":715,"props":775,"children":777},{"className":776},[],[778],{"type":705,"value":779},"value",{"type":705,"value":781}," — значение свойства. Поэтому базовая операция выглядит как присваивание по вычисляемому ключу: ",{"type":700,"tag":715,"props":783,"children":785},{"className":784},[],[786],{"type":705,"value":787},"result[name] = value",{"type":705,"value":789},".",{"data":791,"body":792},{},{"type":697,"children":793},[794,813],{"type":700,"tag":701,"props":795,"children":796},{},[797,803,805,811],{"type":700,"tag":715,"props":798,"children":800},{"className":799},[],[801],{"type":705,"value":802},"Object.fromEntries()",{"type":705,"value":804}," создаёт объект из набора пар вида ",{"type":700,"tag":715,"props":806,"children":808},{"className":807},[],[809],{"type":705,"value":810},"[ключ, значение]",{"type":705,"value":812},". Поэтому задача удобно решается через промежуточное представление в виде пар.",{"type":700,"tag":708,"props":814,"children":817},{"className":815,"code":816,"language":705},[711],"// 1) Преобразование элемента в пару:\n{ name: \"width\", value: 10 }  ->  [\"width\", 10]\n\n// 2) Сборка объекта из пар:\n[ [\"width\", 10], [\"height\", 20] ]  ->  { width: 10, height: 20 }\u003C/code>\u003C/pre>\n\nСхема потока данных:\n\n\u003Cpre>\u003Ccode>[ {name, value}, {name, value}, ... ]\n          |\n          | map: ({name,value}) => [name,value]\n          v\n[ [name, value], [name, value], ... ]\n          |\n          | Object.fromEntries\n          v\n{ [name]: value, [name]: value, ... }\n",[818],{"type":700,"tag":715,"props":819,"children":820},{"__ignoreMap":717},[821],{"type":705,"value":816},{"data":823,"body":824},{},{"type":697,"children":825},[826,837,842,851],{"type":700,"tag":701,"props":827,"children":828},{},[829,835],{"type":700,"tag":715,"props":830,"children":832},{"className":831},[],[833],{"type":705,"value":834},"reduce()",{"type":705,"value":836}," «сворачивает» массив к одному результату. В качестве результата удобно выбрать объект, а затем постепенно добавлять в него свойства.",{"type":700,"tag":701,"props":838,"children":839},{},[840],{"type":705,"value":841},"Мини-схема итераций:",{"type":700,"tag":708,"props":843,"children":846},{"className":844,"code":845,"language":705},[711],"acc = {}\nэлемент 1: acc[name1] = value1  -> acc = { name1: value1 }\nэлемент 2: acc[name2] = value2  -> acc = { name1: value1, name2: value2 }\n...\n",[847],{"type":700,"tag":715,"props":848,"children":849},{"__ignoreMap":717},[850],{"type":705,"value":845},{"type":700,"tag":701,"props":852,"children":853},{},[854,856,862,864,870],{"type":705,"value":855},"Важно понимать роль ",{"type":700,"tag":715,"props":857,"children":859},{"className":858},[],[860],{"type":705,"value":861},"initialValue",{"type":705,"value":863},": когда оно равно ",{"type":700,"tag":715,"props":865,"children":867},{"className":866},[],[868],{"type":705,"value":869},"{}",{"type":705,"value":871},", аккумулятор с первой итерации является объектом результата.",{"data":873,"body":874},{},{"type":697,"children":875},[876,881],{"type":700,"tag":701,"props":877,"children":878},{},[879],{"type":705,"value":880},"Выбор обычно зависит от читаемости и необходимости дополнительных проверок.",{"type":700,"tag":882,"props":883,"children":884},"table",{},[885,915],{"type":700,"tag":886,"props":887,"children":888},"thead",{},[889],{"type":700,"tag":890,"props":891,"children":892},"tr",{},[893,899,905,910],{"type":700,"tag":894,"props":895,"children":896},"th",{},[897],{"type":705,"value":898},"Подход",{"type":700,"tag":894,"props":900,"children":902},{"align":901},"right",[903],{"type":705,"value":904},"Короткость кода",{"type":700,"tag":894,"props":906,"children":907},{"align":901},[908],{"type":705,"value":909},"Читаемость новичку",{"type":700,"tag":894,"props":911,"children":912},{"align":901},[913],{"type":705,"value":914},"Удобство проверок",{"type":700,"tag":916,"props":917,"children":918},"tbody",{},[919,946,970,995],{"type":700,"tag":890,"props":920,"children":921},{},[922,932,937,942],{"type":700,"tag":923,"props":924,"children":925},"td",{},[926],{"type":700,"tag":715,"props":927,"children":929},{"className":928},[],[930],{"type":705,"value":931},"Object.fromEntries + map",{"type":700,"tag":923,"props":933,"children":934},{"align":901},[935],{"type":705,"value":936},"Высокая",{"type":700,"tag":923,"props":938,"children":939},{"align":901},[940],{"type":705,"value":941},"Средняя",{"type":700,"tag":923,"props":943,"children":944},{"align":901},[945],{"type":705,"value":941},{"type":700,"tag":890,"props":947,"children":948},{},[949,958,962,966],{"type":700,"tag":923,"props":950,"children":951},{},[952],{"type":700,"tag":715,"props":953,"children":955},{"className":954},[],[956],{"type":705,"value":957},"reduce",{"type":700,"tag":923,"props":959,"children":960},{"align":901},[961],{"type":705,"value":941},{"type":700,"tag":923,"props":963,"children":964},{"align":901},[965],{"type":705,"value":941},{"type":700,"tag":923,"props":967,"children":968},{"align":901},[969],{"type":705,"value":936},{"type":700,"tag":890,"props":971,"children":972},{},[973,982,987,991],{"type":700,"tag":923,"props":974,"children":975},{},[976],{"type":700,"tag":715,"props":977,"children":979},{"className":978},[],[980],{"type":705,"value":981},"for...of",{"type":700,"tag":923,"props":983,"children":984},{"align":901},[985],{"type":705,"value":986},"Низкая/средняя",{"type":700,"tag":923,"props":988,"children":989},{"align":901},[990],{"type":705,"value":936},{"type":700,"tag":923,"props":992,"children":993},{"align":901},[994],{"type":705,"value":936},{"type":700,"tag":890,"props":996,"children":997},{},[998,1007,1011,1015],{"type":700,"tag":923,"props":999,"children":1000},{},[1001],{"type":700,"tag":715,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":705,"value":1006},"Object.create(null)",{"type":700,"tag":923,"props":1008,"children":1009},{"align":901},[1010],{"type":705,"value":941},{"type":700,"tag":923,"props":1012,"children":1013},{"align":901},[1014],{"type":705,"value":941},{"type":700,"tag":923,"props":1016,"children":1017},{"align":901},[1018],{"type":705,"value":936},{"data":1020,"body":1021},{},{"type":697,"children":1022},[1023],{"type":700,"tag":1024,"props":1025,"children":1026},"ul",{},[1027,1046,1057,1092],{"type":700,"tag":1028,"props":1029,"children":1030},"li",{},[1031,1033,1038,1040,1045],{"type":705,"value":1032},"Повтор ключей (",{"type":700,"tag":715,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":705,"value":771},{"type":705,"value":1039}," одинаковый): будет перезапись, поэтому сохранится значение из последнего элемента с таким ",{"type":700,"tag":715,"props":1041,"children":1043},{"className":1042},[],[1044],{"type":705,"value":771},{"type":705,"value":789},{"type":700,"tag":1028,"props":1047,"children":1048},{},[1049,1051,1056],{"type":705,"value":1050},"Пустой массив: корректным результатом является пустой объект ",{"type":700,"tag":715,"props":1052,"children":1054},{"className":1053},[],[1055],{"type":705,"value":869},{"type":705,"value":789},{"type":700,"tag":1028,"props":1058,"children":1059},{},[1060,1062,1068,1070,1076,1077,1083,1084,1090],{"type":705,"value":1061},"Значения ",{"type":700,"tag":715,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":705,"value":1067},"0",{"type":705,"value":1069},", ",{"type":700,"tag":715,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":705,"value":1075},"false",{"type":705,"value":1069},{"type":700,"tag":715,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":705,"value":1082},"\"\"",{"type":705,"value":1069},{"type":700,"tag":715,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":705,"value":1089},"null",{"type":705,"value":1091},": это допустимые значения, они должны сохраняться без попыток «отфильтровать пустое».",{"type":700,"tag":1028,"props":1093,"children":1094},{},[1095,1097,1102,1104,1109,1111,1117],{"type":705,"value":1096},"Неожиданная форма элементов: если элемент без ",{"type":700,"tag":715,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":705,"value":771},{"type":705,"value":1103}," или ",{"type":700,"tag":715,"props":1105,"children":1107},{"className":1106},[],[1108],{"type":705,"value":771},{"type":705,"value":1110}," не строка, уместно выбрасывать ",{"type":700,"tag":715,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":705,"value":1116},"TypeError",{"type":705,"value":1118},", чтобы ошибка обнаруживалась рядом с источником данных.",{"data":1120,"body":1121},{},{"type":697,"children":1122},[1123],{"type":700,"tag":701,"props":1124,"children":1125},{},[1126,1128,1134,1136,1141,1143,1148],{"type":705,"value":1127},"Проверка вида ",{"type":700,"tag":715,"props":1129,"children":1131},{"className":1130},[],[1132],{"type":705,"value":1133},"if (value)",{"type":705,"value":1135}," для этой задачи является типичной ошибкой, потому что ",{"type":700,"tag":715,"props":1137,"children":1139},{"className":1138},[],[1140],{"type":705,"value":1067},{"type":705,"value":1142}," и ",{"type":700,"tag":715,"props":1144,"children":1146},{"className":1145},[],[1147],{"type":705,"value":1082},{"type":705,"value":1149}," являются корректными значениями, но считаются «ложными» в условиях.",{"data":1151,"body":1152},{},{"type":697,"children":1153},[1154],{"type":700,"tag":701,"props":1155,"children":1156},{},[1157,1159,1164,1166,1171,1173,1179,1180,1186,1188,1193,1195,1200],{"type":705,"value":1158},"Кратко: задача решается созданием объекта, где ключом становится ",{"type":700,"tag":715,"props":1160,"children":1162},{"className":1161},[],[1163],{"type":705,"value":771},{"type":705,"value":1165},", а значением — ",{"type":700,"tag":715,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":705,"value":779},{"type":705,"value":1172},"; удобные реализации: ",{"type":700,"tag":715,"props":1174,"children":1176},{"className":1175},[],[1177],{"type":705,"value":1178},"Object.fromEntries(arr.map(...))",{"type":705,"value":1069},{"type":700,"tag":715,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":705,"value":1185},"arr.reduce(..., {})",{"type":705,"value":1187}," или цикл ",{"type":700,"tag":715,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":705,"value":981},{"type":705,"value":1194},". Для надёжности полезно помнить про перезапись при одинаковых ключах и не отбрасывать значения вроде ",{"type":700,"tag":715,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":705,"value":1067},{"type":705,"value":789},1775575822708]