From c854e6a0150974c3f7716524782029f2c171cadc Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Wed, 11 Sep 2024 09:03:55 +0300 Subject: [PATCH 01/13] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=B4=D0=BE=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 488 +++++++++++++++++++++++++++ 1 file changed, 488 insertions(+) create mode 100644 js/destructuring-assignment/index.md diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md new file mode 100644 index 0000000000..954bc320dd --- /dev/null +++ b/js/destructuring-assignment/index.md @@ -0,0 +1,488 @@ +--- +title: "Деструктуризация" +description: "Извлекаем свойства объектов в отдельные переменные" +authors: + - vitya-ne +related: + - js/object + - js/arrays + - js/var-let +tags: + - doka +--- + +## Кратко + +Для краткости мы будем применять общепринятый термин "деструктуризация", хотя в спецификации ECMAScript используется понятие _деструктурирующее присваивание_ (Destructuring assignment). + +Деструктуризация - это синтаксис, позволяющий упростить присваивание переменным значений свойств объекта или элементов массива. + +Рассмотрим простой пример. +Требуется извлечь из объекта `person` поля `name` и `age`. +```js +const person = {name: "Александр", age: "37"} +``` +Это можно сделать так: + +```js +const name = person.name +const age = person.age +``` +Используя деструктуризацию можно сократить код до: +```js +const { name, age } = person +``` + +А вот пример с массивом. +Требуется извлечь из массива `planets` три первых элемента. +```js +const planets = ["Меркурий", "Венера", "Земля", "Марс"] +``` +Это можно сделать, получая значения по индексу: + +```js +const first = planets[0] +const second = planets[1] +const third = planets[2] // мы тут! +``` +А можно, используя деструктуризацию: +```js +const [first, second, third] = planets +``` + +## Как пишется + +Синтаксис деструктуризации во многом похож на определение объектов или массивов с использованием литералов, но при этом `[]` или `{}` будут находится слева от оператора присваивания: + +```js +const [element] = array // element = array[0] +let {field} = obj // field = obj.field +``` + +## Деструктуризация объектов + +Пока что мы рассматривали простые примеры. Преимущества и гибкость деструктуризации раскрываются во всей полноте в более сложных случаях. + +### Значения по умолчанию + +Для извлекаемых свойств объекта можно предусмотреть значения по умолчанию. +Это может понадобиться в случае если объект не содержит полей с указанными именами. + +```js +const point = {x: 120, y: 30} + +const {x, y, color = "black"} = point + +console.log(x, y) +// 120 30 +console.log(color) +// black +``` + +### Переименование извлекаемых свойств + +Допустим объект содержит свойства которые мы хотим извлечь и записать в переменные под другими именами. Вот как это выполнить: + +```js +const shape = {"name.ru": "квадрат", "color-str": "black"} + +const { + "name.ru": name, + "color-str": color +} = shape + +console.log(name, color) +// квадрат black +``` + +### Динамическое определение извлекаемых свойств + +Имена свойств, которые необходимо извлечь из объекта можно указывать динамически. Вот как это выполнить: + +```js +const record = {id: "#2514", value: 45, format: "число", type: "a"} + +// имя извлекаемого свойства +const key = "value" + +const {id, [key]: recordValue} = record + +console.log(id, recordValue) +// #2514 45 +``` + +### Использование оператора `rest` + +С помощью оператора `rest (...)` можно собрать оставшиеся неизвлеченными свойства в новый объект. +Этот приём очень удобен, когда необходимо получить объект, созданный на основе исходного объекта, за исключением указанных полей: + +```js +const point = {x: 120, y: 30, color: "blue", opacity: 0.4} + +const {color, opacity, ...restPoint} = point + +console.log(restPoint) +// { x: 120, y: 30 } +``` + +### Деструктуризация вложенных объектов + +Допустим имеется объект: + +```js +const creator = { + person: { + name: { + firstName: 'Brendan', + lastName: 'Eich' + }, + year: 1961 + }, + creation: 'JavaScript' +} +``` + +Деструктуризация позволяет извлекать свойства вложенных объектов: +```js +// извлечём свойства firstName, year, creation +// переменные person и name не создаются +const {person: {name: {firstName}, year}, creation} = creator + +console.log(firstName, year, creation ) +// Brendan 1961 JavaScript +``` + +### Получение свойств унаследованных от прототипов + +С помощью деструктуризации можно извлечь не только свойства, непосредственно указанные в объекте, но и установленные в прототипах. + +```js +// Функция-конструктор +function Node(name) { + this.name = `#${name}` +} + +// setParent, метод указанный в прототипе +Node.prototype.setParent = parentNode => + this.parent = parent + +// создаём объект +const node = new Node(24) + +// извлекаем свойства: +// name - свойство объекта node +// setParent - метод, определённый в прототипе Node +// valueOf - метод, определённый в прототипе Object +const {name, setParent, valueOf} = node + +console.log(name) +// #24 +console.log(setParent) +// [Function (anonymous)] +console.log(valueOf) +// [Function: valueOf] +``` + +## Извлечение свойств объекта в существующие переменные + +Обычно объявление переменных с помощью `let` или `const` при деструктуризации происходит вместе с их назначением: + +```js +const { foo, bar } = obj +``` + +Если переменные определены ранее, потребуется обернуть операцию в скобки: + +```js +let foo +let bar +// ... +( { foo } = obj ) +``` + +## Деструктуризация массивов + +### Пропуск элементов + +При деструктуризации массива мы можем пропускать элементы значения которых получать не требуется. Для пропуска элемента используется оператор `,`: + +```js +const animals = ["🐱", "🐴", "🦆", "🐶", "🐸", "🐹"] + +const [cat, , , dog] = animals // пропускаем "🐴", "🦆" +console.log(cat, dog) +// 🐱 🐶 +``` + +Пропускать можно один элемент, несколько элементов идущих подряд или несколько групп элементов: + +```js +const animals = ["🐱", "🐴", "🦆", "🐶", "🐸", "🐹"] + +const [, , duck, , frog] = animals // пропускаем "🐱", "🐴", "🐶" +console.log(cat, dog) +// 🦆 🐸 +``` + +### Значения по умолчанию + +Для извлекаемых значений можно предусмотреть значения по умолчанию. +Это может понадобиться в случае если массив пустой или имеет незаполненные элементы. + +```js +const options = Array(5) // [ <5 empty items> ] + +const [first = "Опция по умолчанию", second] = options + +console.log(first) +// Опция по умолчанию +console.log(second) +// undefined +``` + +### Использование оператора `rest` + +С помощью оператора `rest (...)` можно собрать оставшиеся неизвлеченными элементы в новый массив. + +```js +const numbers = [2, 4, 8, 16, 32 ,64] + +const [elem0, , elem2, ...restNumbers] = numbers + +console.log(elem0, elem2) +// 2 8 +console.log(second) +// [ 16, 32, 64 ] +``` +Следует иметь ввиду, что `rest`-оператор может быть указан только самым последним, иначе произойдёт ошибка: + +```js +const numbers = [2, 4, 8, 16, 32 ,64] + +const [elem0, ...restNumbers, elemLast ] = numbers +// SyntaxError: Rest element must be last element +``` + +Можно также произвести деструктуризацию в массиве образуемом rest-оператором: + +```js +const numbers = [2, 4, 8, 16, 32 ,64] + +const [elem0, elem1, ...[ elem2, ...restNumbers ] ] = numbers + +console.log(elem2) +// 8 +console.log(restNumbers) +// [16, 32, 64] +``` + +### Деструктуризация вложенных массивов + +C помощью деструктуризации удобно извлекать значения из вложенных массивов. + +```js +const numbers = [ + 1, + [2, [2.3, 2.89]], + 4 +] + +// извлечём значения 1-ого элемента массива +const [, [elem10, [elem11, elem12]]] = numbers + +console.log(elem10, elem11, elem12 ) +// 2 2.3 2.89 +``` + +## Использование деструктуризации + +Синтаксис деструктуризации улучшает читаемость кода. Рассмотрим несколько примеров. + +### Передачи множества параметров в функцию + +Ситуаций, когда функция принимает множество параметров, лучше избегать. При вызове такой функции легко запутаться в очерёдности аргументов, особенно если часть из них не обязательны: + +```js +function createOption(title, hint='' , description='', callback, classes) { + // реализация +} + +// пример вызова +const loadFileOption = createOption( + 'Открыть файл', + undefined, + undefined, + loadFileHandler, + 'option' +) +``` + +Можно улучшить подобный код путём замены множества отдельных параметров на один объект. Тут как раз пригодится деструктуризация. За счёт минимальных изменений мы получаем: +- названия свойств передаваемого объекта помогают понять смысл параметра; +- нет необходимости строгого соблюдения порядка аргументов при вызове; + +```js +function createOption({title, hint='' , description='', callback, classes}) { + // реализация +} + +// пример вызова +const loadFileOption = createOption({ + title: 'Открыть файл', + classes:'option' + callback: loadFileHandler +}) +``` + +### Уточнение аргумента колбэк-функции во встроенных методах массива + +Допустим необходимо отфильтровать массив объектов на основе нескольких свойств: + +```js +const images = [ + { + name: "Кот в сапогах", + data: { + type: "book", + size: [800, 600] + } + }, + { + name: "Тётя-тётя Кошка", + data: { + type: "book", + size: [640, 480] + }, + }, + { + name: "Васька слушает, да ест", + data: { + type: "mem", + size: [1024, 768] + } + }, +] + +// получаем значения необходимых свойств внутри колбэк функции +const bookImages = images.filter((item) => { + if (item.data.type === 'book' && item.data.size[0] > 640) { + return true + } + return false +}) +``` + +Деструктуризация позволяет извлечь нужные свойства при передаче параметра в колбэк, упрощая код колбэк-функции: +```js +const bookImages = images.filter(({data:{type, size:[width]}}) => { + if (type === 'book' && width > 640) { + return true + } + return false +}) +``` + +### Функция возвращающая несколько значений + +Иногда удобно получать из функции несколько значений. +Деструктуризация результата выполнения функции позволяет избежать создания временного массива при получении: + +```js +function getMinMax (numbers = []) { + const minValue = Math.min(...numbers) + const maxValue = Math.max(...numbers) + return [minValue, maxValue] +} + +const [min, max] = getMinMax([2, 0, 10, 5, 8]) + +console.log(min, max) +// 0 10 +``` + +## Трюки + +Рассмотрим несколько неочевидных возможностей применения деструктуризации. + +### Как поменять местами значения двух переменных используя только одну операцию ? + +Скорее всего это не потребуется в реальном проекте, но такая возможность есть! + +```js +let a = 8 +// ⚠️ Внимание! без `;` в конце строки будет ошибка! +let b = 16; + +[a, b] = [b, a] +console.log(a, b) +// 16 8 +``` + +### Копирования значений из одного объекта в другой + +При деструктуризации объекта извлекаемые значения можно напрямую помещать в другой, ранее созданный объект: + +```js +function getDeviceParams () { + // объект-приёмник + // ⚠️ Внимание! без `;` в конце строки будет ошибка! + const data = {lastCall: Date.now(), window: {}}; + + // копируем требуемые свойства из объекта window в объект data + ( { + screen: { + orientation: {type: data.orientation} + availWidth: data.window.availableWidth + availHeight: data.window.availableHeight + }, + navigator: {language: data.lang} + } = window ) + + return data +} + +console.log(getDeviceParams()) +// { +// lang: "en-US", +// lastCall: 1726815477972, +// orientation: "landscape-primary", +// window: { availableHeight: 1040, availableWidth: 1920 } +// } + +``` + +### Получение первого и последнего элемента массива одной строкой кода + +Так как массив, это так же и объект, мы можем с помощью деструктуризации извлекать его свойства. Разберём решения по частям. + +Элементы массива будут доступны как свойства с именами-индексами: + +```js +const numbers = [5, 7, 9, 3] + +const { 0: first, 1: second } = numbers + +console.log(first, second) +// 5 7 +``` + +Зная размер массива получим доступ к последнему элементу: + +```js + +const { [arr.length - 1]: last } = numbers + +console.log(last) +// 3 +``` + +А теперь объединим всё вместе: + +```js +const numbers = [5, 7, 9, 3] + +const { 0: first, [arr.length - 1]: last } = numbers + +console.log(first, last) +// 5 3 +``` From 49422d0c8c6b8c304e58d6566d8c0b9131f0876f Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Fri, 20 Sep 2024 10:54:16 +0300 Subject: [PATCH 02/13] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BA=D0=B0=D0=B2=D1=8B=D1=87=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D1=82=20=D0=BA=D1=80=D0=B8=D1=82=D0=B8=D1=87=D0=B5=D1=81?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B2=D0=B0=D0=B6=D0=BD=D1=83=D1=8E=20';'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index 954bc320dd..27f117c492 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -133,12 +133,12 @@ console.log(restPoint) const creator = { person: { name: { - firstName: 'Brendan', - lastName: 'Eich' + firstName: "Brendan", + lastName: "Eich" }, year: 1961 }, - creation: 'JavaScript' + creation: "JavaScript" } ``` @@ -195,7 +195,8 @@ const { foo, bar } = obj ```js let foo -let bar +// ⚠️ Внимание! без `;` в конце строки будет ошибка! +let bar; // ... ( { foo } = obj ) ``` @@ -303,17 +304,17 @@ console.log(elem10, elem11, elem12 ) Ситуаций, когда функция принимает множество параметров, лучше избегать. При вызове такой функции легко запутаться в очерёдности аргументов, особенно если часть из них не обязательны: ```js -function createOption(title, hint='' , description='', callback, classes) { +function createOption(title, hint="" , description="", callback, classes) { // реализация } // пример вызова const loadFileOption = createOption( - 'Открыть файл', + "Открыть файл", undefined, undefined, loadFileHandler, - 'option' + "option" ) ``` @@ -322,14 +323,14 @@ const loadFileOption = createOption( - нет необходимости строгого соблюдения порядка аргументов при вызове; ```js -function createOption({title, hint='' , description='', callback, classes}) { +function createOption({title, hint="" , description="", callback, classes}) { // реализация } // пример вызова const loadFileOption = createOption({ - title: 'Открыть файл', - classes:'option' + title: "Открыть файл", + classes:"option" callback: loadFileHandler }) ``` @@ -365,7 +366,7 @@ const images = [ // получаем значения необходимых свойств внутри колбэк функции const bookImages = images.filter((item) => { - if (item.data.type === 'book' && item.data.size[0] > 640) { + if (item.data.type === "book" && item.data.size[0] > 640) { return true } return false @@ -375,7 +376,7 @@ const bookImages = images.filter((item) => { Деструктуризация позволяет извлечь нужные свойства при передаче параметра в колбэк, упрощая код колбэк-функции: ```js const bookImages = images.filter(({data:{type, size:[width]}}) => { - if (type === 'book' && width > 640) { + if (type === "book" && width > 640) { return true } return false From 61ddb82bf9a723dcf0f92dc90d941e3a41738937 Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:00:18 +0300 Subject: [PATCH 03/13] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index 27f117c492..ee9edd7bdb 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -471,7 +471,7 @@ console.log(first, second) ```js -const { [arr.length - 1]: last } = numbers +const { [numbers.length - 1]: last } = numbers console.log(last) // 3 @@ -482,7 +482,7 @@ console.log(last) ```js const numbers = [5, 7, 9, 3] -const { 0: first, [arr.length - 1]: last } = numbers +const { 0: first, [numbers.length - 1]: last } = numbers console.log(first, last) // 5 3 From 8394c1fabfe803224d3847b2a22d4b1cacbf2f1a Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Fri, 20 Sep 2024 21:03:06 +0300 Subject: [PATCH 04/13] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=B4=D0=BE=D0=BA=D1=83=20=D0=B2=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=20'=D0=9F=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B2=D0=B8=D0=BD=D1=83=D1=82=D1=8B=D0=B9=20=D1=81=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D0=BA=D1=81=D0=B8=D1=81'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/js/index.md b/js/index.md index a6fa822a74..d1107a1490 100644 --- a/js/index.md +++ b/js/index.md @@ -25,6 +25,7 @@ groups: - shallow-or-deep-clone - iterator - date + - destructuring-assignment - name: "Примитивные типы данных" items: - number From d9ea0b97172e343e2e6ba46c72a7f2387dbda734 Mon Sep 17 00:00:00 2001 From: Tatiana Fokina Date: Sun, 22 Sep 2024 02:53:58 +0400 Subject: [PATCH 05/13] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=85=D0=BE=D0=B4=20=D1=80=D0=B5=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B8=D0=BD=D1=8C=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 212 ++++++++++++++------------- 1 file changed, 110 insertions(+), 102 deletions(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index ee9edd7bdb..23905b6c29 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -1,6 +1,6 @@ --- title: "Деструктуризация" -description: "Извлекаем свойства объектов в отдельные переменные" +description: "Извлекаем свойства объектов в отдельные переменные." authors: - vitya-ne related: @@ -13,46 +13,50 @@ tags: ## Кратко -Для краткости мы будем применять общепринятый термин "деструктуризация", хотя в спецификации ECMAScript используется понятие _деструктурирующее присваивание_ (Destructuring assignment). +Деструктуризация — это синтаксис, позволяющий упростить присваивание переменным значений свойств объекта или элементов массива. Для краткости будем использовать общепринятый термин «деструктуризация», хотя в спецификации ECMAScript используется понятие _деструктурирующее присваивание (Destructuring assignment)_. -Деструктуризация - это синтаксис, позволяющий упростить присваивание переменным значений свойств объекта или элементов массива. +Рассмотрим простой пример. Нужно извлечь из объекта `person` поля `name` и `age`. -Рассмотрим простой пример. -Требуется извлечь из объекта `person` поля `name` и `age`. ```js -const person = {name: "Александр", age: "37"} +const person = {name: 'Александр', age: '37'} ``` + Это можно сделать так: ```js const name = person.name const age = person.age ``` -Используя деструктуризацию можно сократить код до: + +Используя деструктуризацию, можно сократить код до: + ```js -const { name, age } = person +const {name, age} = person ``` -А вот пример с массивом. -Требуется извлечь из массива `planets` три первых элемента. +А вот пример с массивом. Извлечём из массива `planets` три первых элемента. + ```js -const planets = ["Меркурий", "Венера", "Земля", "Марс"] +const planets = ['Меркурий', 'Венера', 'Земля', 'Марс'] ``` + Это можно сделать, получая значения по индексу: ```js const first = planets[0] const second = planets[1] -const third = planets[2] // мы тут! +const third = planets[2] // Мы тут! ``` + А можно, используя деструктуризацию: + ```js const [first, second, third] = planets ``` ## Как пишется -Синтаксис деструктуризации во многом похож на определение объектов или массивов с использованием литералов, но при этом `[]` или `{}` будут находится слева от оператора присваивания: +Синтаксис деструктуризации во многом похож на определение объектов или массивов с использованием литералов, но при этом `[]` или `{}` будут находиться слева от оператора присваивания: ```js const [element] = array // element = array[0] @@ -61,34 +65,34 @@ let {field} = obj // field = obj.field ## Деструктуризация объектов -Пока что мы рассматривали простые примеры. Преимущества и гибкость деструктуризации раскрываются во всей полноте в более сложных случаях. +Пока что разобрали простые примеры. Преимущества и гибкость деструктуризации раскрываются во всей полноте в сложных случаях. ### Значения по умолчанию -Для извлекаемых свойств объекта можно предусмотреть значения по умолчанию. -Это может понадобиться в случае если объект не содержит полей с указанными именами. +Для извлекаемых свойств объекта можно предусмотреть значения по умолчанию. Это может понадобиться, если объект не содержит полей с указанными именами. ```js const point = {x: 120, y: 30} -const {x, y, color = "black"} = point +const {x, y, color = 'black'} = point console.log(x, y) // 120 30 + console.log(color) // black ``` ### Переименование извлекаемых свойств -Допустим объект содержит свойства которые мы хотим извлечь и записать в переменные под другими именами. Вот как это выполнить: +Допустим, объект содержит свойства, которые мы хотим извлечь и записать в переменные под другими именами. Вот как это выполнить: ```js -const shape = {"name.ru": "квадрат", "color-str": "black"} +const shape = {'name.ru': 'квадрат', 'color-str': 'black'} const { - "name.ru": name, - "color-str": color + 'name.ru': name, + 'color-str': color } = shape console.log(name, color) @@ -97,13 +101,13 @@ console.log(name, color) ### Динамическое определение извлекаемых свойств -Имена свойств, которые необходимо извлечь из объекта можно указывать динамически. Вот как это выполнить: +Имена свойств, которые извлекаем из объекта, можно указывать динамически. Вот как это выполнить: ```js -const record = {id: "#2514", value: 45, format: "число", type: "a"} +const record = {id: '#2514', value: 45, format: 'число', type: 'a'} -// имя извлекаемого свойства -const key = "value" +// Имя извлекаемого свойства +const key = 'value' const {id, [key]: recordValue} = record @@ -113,11 +117,10 @@ console.log(id, recordValue) ### Использование оператора `rest` -С помощью оператора `rest (...)` можно собрать оставшиеся неизвлеченными свойства в новый объект. -Этот приём очень удобен, когда необходимо получить объект, созданный на основе исходного объекта, за исключением указанных полей: +Оператор `rest (...)` может собрать неизвлечённые свойства в новый объект. Этот приём удобен, когда получаем объект, созданный на основе исходного объекта, кроме исключением указанных полей: ```js -const point = {x: 120, y: 30, color: "blue", opacity: 0.4} +const point = {x: 120, y: 30, color: 'blue', opacity: 0.4} const {color, opacity, ...restPoint} = point @@ -127,34 +130,35 @@ console.log(restPoint) ### Деструктуризация вложенных объектов -Допустим имеется объект: +Допустим, у нас есть такой объект: ```js const creator = { person: { name: { - firstName: "Brendan", - lastName: "Eich" + firstName: 'Брендан', + lastName: 'Эйх' }, year: 1961 }, - creation: "JavaScript" + creation: 'JavaScript' } ``` Деструктуризация позволяет извлекать свойства вложенных объектов: + ```js -// извлечём свойства firstName, year, creation -// переменные person и name не создаются +// Извлечём свойства firstName, year, creation. +// Переменные person и name не создаются const {person: {name: {firstName}, year}, creation} = creator -console.log(firstName, year, creation ) -// Brendan 1961 JavaScript +console.log(firstName, year, creation) +// Брендан 1961 JavaScript ``` -### Получение свойств унаследованных от прототипов +### Получение свойств, унаследованных от прототипов -С помощью деструктуризации можно извлечь не только свойства, непосредственно указанные в объекте, но и установленные в прототипах. +С помощью деструктуризации можно не только извлечь указанные в объекте свойства, но и те, которые установлены в прототипах. Извлечём `name` (свойство объекта `node`), метод `setParent` (определён в прототипе `Node`) и `valueOf` (определён в прототипе `Object`): ```js // Функция-конструктор @@ -162,40 +166,39 @@ function Node(name) { this.name = `#${name}` } -// setParent, метод указанный в прототипе +// Указанный в прототипе метод setParent Node.prototype.setParent = parentNode => this.parent = parent -// создаём объект +// Создаём объект const node = new Node(24) -// извлекаем свойства: -// name - свойство объекта node -// setParent - метод, определённый в прототипе Node -// valueOf - метод, определённый в прототипе Object +// Извлекаем свойства const {name, setParent, valueOf} = node console.log(name) // #24 + console.log(setParent) // [Function (anonymous)] + console.log(valueOf) // [Function: valueOf] ``` ## Извлечение свойств объекта в существующие переменные -Обычно объявление переменных с помощью `let` или `const` при деструктуризации происходит вместе с их назначением: +При деструктуризации объявление переменных с помощью `let` или `const` обычно происходит вместе с их назначением: ```js -const { foo, bar } = obj +const {foo, bar} = obj ``` -Если переменные определены ранее, потребуется обернуть операцию в скобки: +Если определили переменные ранее, нужно обернуть операцию в скобки: ```js let foo -// ⚠️ Внимание! без `;` в конце строки будет ошибка! +// ⚠️ Внимание! Без `;` в конце строки будет ошибка let bar; // ... ( { foo } = obj ) @@ -205,45 +208,47 @@ let bar; ### Пропуск элементов -При деструктуризации массива мы можем пропускать элементы значения которых получать не требуется. Для пропуска элемента используется оператор `,`: +При деструктуризации массива можете пропускать элементы, значения которых не нужно получать. Для пропуска элемента используют оператор `,`: ```js -const animals = ["🐱", "🐴", "🦆", "🐶", "🐸", "🐹"] +const animals = ['🐱', '🐴', '🦆', '🐶', '🐸', '🐹'] + +const [cat, , , dog] = animals // Пропускаем '🐴', '🦆' -const [cat, , , dog] = animals // пропускаем "🐴", "🦆" console.log(cat, dog) // 🐱 🐶 ``` -Пропускать можно один элемент, несколько элементов идущих подряд или несколько групп элементов: +Можно пропускать один элемент, несколько элементов подряд или их групп: ```js -const animals = ["🐱", "🐴", "🦆", "🐶", "🐸", "🐹"] +const animals = ['🐱', '🐴', '🦆', '🐶', '🐸', '🐹'] + +const [, , duck, , frog] = animals // Пропускаем '🐱', '🐴', '🐶' -const [, , duck, , frog] = animals // пропускаем "🐱", "🐴", "🐶" console.log(cat, dog) // 🦆 🐸 ``` ### Значения по умолчанию -Для извлекаемых значений можно предусмотреть значения по умолчанию. -Это может понадобиться в случае если массив пустой или имеет незаполненные элементы. +Можно предусмотреть значения по умолчанию. Это понадобится, если массив пустой или имеет незаполненные элементы. ```js const options = Array(5) // [ <5 empty items> ] -const [first = "Опция по умолчанию", second] = options +const [first = 'Опция по умолчанию', second] = options console.log(first) // Опция по умолчанию + console.log(second) // undefined ``` ### Использование оператора `rest` -С помощью оператора `rest (...)` можно собрать оставшиеся неизвлеченными элементы в новый массив. +С помощью оператора `rest (...)` соберём в новый массив элементы,оставшиеся неизвлечёнными. ```js const numbers = [2, 4, 8, 16, 32 ,64] @@ -252,10 +257,12 @@ const [elem0, , elem2, ...restNumbers] = numbers console.log(elem0, elem2) // 2 8 + console.log(second) // [ 16, 32, 64 ] ``` -Следует иметь ввиду, что `rest`-оператор может быть указан только самым последним, иначе произойдёт ошибка: + +Учитывайте, что `rest`-оператор можно указать только последним, иначе произойдёт ошибка: ```js const numbers = [2, 4, 8, 16, 32 ,64] @@ -264,7 +271,7 @@ const [elem0, ...restNumbers, elemLast ] = numbers // SyntaxError: Rest element must be last element ``` -Можно также произвести деструктуризацию в массиве образуемом rest-оператором: +Также можете произвести деструктуризацию в массиве, образуемом rest-оператором: ```js const numbers = [2, 4, 8, 16, 32 ,64] @@ -273,6 +280,7 @@ const [elem0, elem1, ...[ elem2, ...restNumbers ] ] = numbers console.log(elem2) // 8 + console.log(restNumbers) // [16, 32, 64] ``` @@ -288,10 +296,10 @@ const numbers = [ 4 ] -// извлечём значения 1-ого элемента массива +// Извлечём значения первого элемента массива const [, [elem10, [elem11, elem12]]] = numbers -console.log(elem10, elem11, elem12 ) +console.log(elem10, elem11, elem12) // 2 2.3 2.89 ``` @@ -301,92 +309,93 @@ console.log(elem10, elem11, elem12 ) ### Передачи множества параметров в функцию -Ситуаций, когда функция принимает множество параметров, лучше избегать. При вызове такой функции легко запутаться в очерёдности аргументов, особенно если часть из них не обязательны: +Лучше избегать ситуаций, когда функция принимает множество параметров. При вызове такой функции легко запутаться в очерёдности аргументов, особенно если часть из них не обязательна: ```js function createOption(title, hint="" , description="", callback, classes) { - // реализация + // Реализация } -// пример вызова +// Пример вызова const loadFileOption = createOption( - "Открыть файл", + 'Открыть файл', undefined, undefined, loadFileHandler, - "option" + 'option' ) ``` -Можно улучшить подобный код путём замены множества отдельных параметров на один объект. Тут как раз пригодится деструктуризация. За счёт минимальных изменений мы получаем: +Можем улучшить этот код, заменив множества отдельных параметров на один объект. Тут как раз и пригодится деструктуризация. За счёт минимальных изменений мы получаем: + - названия свойств передаваемого объекта помогают понять смысл параметра; -- нет необходимости строгого соблюдения порядка аргументов при вызове; +- нет необходимости строгого соблюдения порядка аргументов при вызове. ```js function createOption({title, hint="" , description="", callback, classes}) { - // реализация + // Реализация } -// пример вызова +// Пример вызова const loadFileOption = createOption({ - title: "Открыть файл", - classes:"option" + title: 'Открыть файл', + classes:'option' callback: loadFileHandler }) ``` ### Уточнение аргумента колбэк-функции во встроенных методах массива -Допустим необходимо отфильтровать массив объектов на основе нескольких свойств: +Допустим, мы хотим отфильтровать массив объектов на основе нескольких свойств: ```js const images = [ { - name: "Кот в сапогах", + name: 'Кот в сапогах', data: { - type: "book", + type: 'book', size: [800, 600] } }, { - name: "Тётя-тётя Кошка", + name: 'Тётя-тётя Кошка', data: { - type: "book", + type: 'book', size: [640, 480] }, }, { - name: "Васька слушает, да ест", + name: 'Васька слушает, да ест', data: { - type: "mem", + type: 'mem', size: [1024, 768] } }, ] -// получаем значения необходимых свойств внутри колбэк функции +// Получаем значения нужных свойств внутри колбэк-функции const bookImages = images.filter((item) => { - if (item.data.type === "book" && item.data.size[0] > 640) { + if (item.data.type === 'book' && item.data.size[0] > 640) { return true } return false }) ``` -Деструктуризация позволяет извлечь нужные свойства при передаче параметра в колбэк, упрощая код колбэк-функции: +Деструктуризация поможет извлечь нужные свойства при передаче параметра в колбэк, что упростит код функции: + ```js const bookImages = images.filter(({data:{type, size:[width]}}) => { - if (type === "book" && width > 640) { + if (type === 'book' && width > 640) { return true } return false }) ``` -### Функция возвращающая несколько значений +### Функция, возвращающая несколько значений -Иногда удобно получать из функции несколько значений. -Деструктуризация результата выполнения функции позволяет избежать создания временного массива при получении: +Иногда удобно получать из функции несколько значений. Деструктуризация результата выполнения функции не создаст временный массив при получении: ```js function getMinMax (numbers = []) { @@ -405,31 +414,32 @@ console.log(min, max) Рассмотрим несколько неочевидных возможностей применения деструктуризации. -### Как поменять местами значения двух переменных используя только одну операцию ? +### Как поменять местами значения двух переменных, используя только одну операцию? -Скорее всего это не потребуется в реальном проекте, но такая возможность есть! +Скорее всего, этого не потребуется в реальном проекте, но такая возможность есть. ```js let a = 8 -// ⚠️ Внимание! без `;` в конце строки будет ошибка! +// ⚠️ Внимание! Без `;` в конце строки будет ошибка let b = 16; [a, b] = [b, a] + console.log(a, b) // 16 8 ``` -### Копирования значений из одного объекта в другой +### Копированин значений из одного объекта в другой При деструктуризации объекта извлекаемые значения можно напрямую помещать в другой, ранее созданный объект: ```js function getDeviceParams () { - // объект-приёмник - // ⚠️ Внимание! без `;` в конце строки будет ошибка! + // Объект-приёмник + // ⚠️ Внимание! Без `;` в конце строки будет ошибка const data = {lastCall: Date.now(), window: {}}; - // копируем требуемые свойства из объекта window в объект data + // Копируем нужные свойства из объекта window в объект data ( { screen: { orientation: {type: data.orientation} @@ -444,33 +454,31 @@ function getDeviceParams () { console.log(getDeviceParams()) // { -// lang: "en-US", +// lang: 'en-US', // lastCall: 1726815477972, -// orientation: "landscape-primary", +// orientation: 'landscape-primary', // window: { availableHeight: 1040, availableWidth: 1920 } // } - ``` ### Получение первого и последнего элемента массива одной строкой кода -Так как массив, это так же и объект, мы можем с помощью деструктуризации извлекать его свойства. Разберём решения по частям. +Так как массив — это также и объект, с помощью деструктуризации можем извлекать его свойства. Разберём решения по частям. -Элементы массива будут доступны как свойства с именами-индексами: +Элементы массива доступны как свойства с именами-индексами: ```js const numbers = [5, 7, 9, 3] -const { 0: first, 1: second } = numbers +const {0: first, 1: second} = numbers console.log(first, second) // 5 7 ``` -Зная размер массива получим доступ к последнему элементу: +Зная размер массива, получим доступ к последнему элементу: ```js - const { [numbers.length - 1]: last } = numbers console.log(last) From fd0d33d55b59632dc2987d325b197b0dd28f38c2 Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Mon, 23 Sep 2024 21:01:37 +0300 Subject: [PATCH 06/13] =?UTF-8?q?=D0=A3=D0=BF=D1=80=D0=BE=D1=89=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 31 +++++----------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index 23905b6c29..a647f89a1b 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -67,8 +67,6 @@ let {field} = obj // field = obj.field Пока что разобрали простые примеры. Преимущества и гибкость деструктуризации раскрываются во всей полноте в сложных случаях. -### Значения по умолчанию - Для извлекаемых свойств объекта можно предусмотреть значения по умолчанию. Это может понадобиться, если объект не содержит полей с указанными именами. ```js @@ -83,8 +81,6 @@ console.log(color) // black ``` -### Переименование извлекаемых свойств - Допустим, объект содержит свойства, которые мы хотим извлечь и записать в переменные под другими именами. Вот как это выполнить: ```js @@ -99,8 +95,6 @@ console.log(name, color) // квадрат black ``` -### Динамическое определение извлекаемых свойств - Имена свойств, которые извлекаем из объекта, можно указывать динамически. Вот как это выполнить: ```js @@ -111,12 +105,10 @@ const key = 'value' const {id, [key]: recordValue} = record -console.log(id, recordValue) -// #2514 45 +console.log(id, ":", recordValue) +// #2514 : 45 ``` -### Использование оператора `rest` - Оператор `rest (...)` может собрать неизвлечённые свойства в новый объект. Этот приём удобен, когда получаем объект, созданный на основе исходного объекта, кроме исключением указанных полей: ```js @@ -128,8 +120,7 @@ console.log(restPoint) // { x: 120, y: 30 } ``` -### Деструктуризация вложенных объектов - +Деструктуризация может выполняться для объектов любой вложенности. Допустим, у нас есть такой объект: ```js @@ -145,7 +136,7 @@ const creator = { } ``` -Деструктуризация позволяет извлекать свойства вложенных объектов: +Извлекаем свойства вложенных объектов: ```js // Извлечём свойства firstName, year, creation. @@ -156,8 +147,6 @@ console.log(firstName, year, creation) // Брендан 1961 JavaScript ``` -### Получение свойств, унаследованных от прототипов - С помощью деструктуризации можно не только извлечь указанные в объекте свойства, но и те, которые установлены в прототипах. Извлечём `name` (свойство объекта `node`), метод `setParent` (определён в прототипе `Node`) и `valueOf` (определён в прототипе `Object`): ```js @@ -186,8 +175,6 @@ console.log(valueOf) // [Function: valueOf] ``` -## Извлечение свойств объекта в существующие переменные - При деструктуризации объявление переменных с помощью `let` или `const` обычно происходит вместе с их назначением: ```js @@ -201,13 +188,11 @@ let foo // ⚠️ Внимание! Без `;` в конце строки будет ошибка let bar; // ... -( { foo } = obj ) +( { foo, bar } = obj ) ``` ## Деструктуризация массивов -### Пропуск элементов - При деструктуризации массива можете пропускать элементы, значения которых не нужно получать. Для пропуска элемента используют оператор `,`: ```js @@ -230,8 +215,6 @@ console.log(cat, dog) // 🦆 🐸 ``` -### Значения по умолчанию - Можно предусмотреть значения по умолчанию. Это понадобится, если массив пустой или имеет незаполненные элементы. ```js @@ -246,8 +229,6 @@ console.log(second) // undefined ``` -### Использование оператора `rest` - С помощью оператора `rest (...)` соберём в новый массив элементы,оставшиеся неизвлечёнными. ```js @@ -285,8 +266,6 @@ console.log(restNumbers) // [16, 32, 64] ``` -### Деструктуризация вложенных массивов - C помощью деструктуризации удобно извлекать значения из вложенных массивов. ```js From 9a4459482e530fc8b55086acb59a440247be2acb Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Mon, 23 Sep 2024 21:10:38 +0300 Subject: [PATCH 07/13] =?UTF-8?q?=D0=A3=D1=81=D1=82=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B2=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index a647f89a1b..aeb7f9f77e 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -286,7 +286,7 @@ console.log(elem10, elem11, elem12) Синтаксис деструктуризации улучшает читаемость кода. Рассмотрим несколько примеров. -### Передачи множества параметров в функцию +### Передача множества параметров в функцию Лучше избегать ситуаций, когда функция принимает множество параметров. При вызове такой функции легко запутаться в очерёдности аргументов, особенно если часть из них не обязательна: @@ -408,7 +408,7 @@ console.log(a, b) // 16 8 ``` -### Копированин значений из одного объекта в другой +### Копирование значений из одного объекта в другой При деструктуризации объекта извлекаемые значения можно напрямую помещать в другой, ранее созданный объект: From 20c10ad09dc5ab574dcc40aefdabeb70ee5bbe64 Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Mon, 23 Sep 2024 21:47:47 +0300 Subject: [PATCH 08/13] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=B2=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index aeb7f9f77e..7d1cffda26 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -211,7 +211,7 @@ const animals = ['🐱', '🐴', '🦆', '🐶', '🐸', '🐹'] const [, , duck, , frog] = animals // Пропускаем '🐱', '🐴', '🐶' -console.log(cat, dog) +console.log(duck, frog) // 🦆 🐸 ``` From 357c8a31a6bc88a2dfbb3cf6d41e64846e39e8a3 Mon Sep 17 00:00:00 2001 From: Tatiana Fokina Date: Sat, 28 Sep 2024 02:45:54 +0400 Subject: [PATCH 09/13] =?UTF-8?q?=D0=A1=D0=BB=D0=B5=D0=B3=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index 7d1cffda26..4af0715a3d 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -95,7 +95,7 @@ console.log(name, color) // квадрат black ``` -Имена свойств, которые извлекаем из объекта, можно указывать динамически. Вот как это выполнить: +Имена свойств, которые извлекаем из объекта, можно указывать динамически. Выполним это вот так: ```js const record = {id: '#2514', value: 45, format: 'число', type: 'a'} @@ -109,7 +109,7 @@ console.log(id, ":", recordValue) // #2514 : 45 ``` -Оператор `rest (...)` может собрать неизвлечённые свойства в новый объект. Этот приём удобен, когда получаем объект, созданный на основе исходного объекта, кроме исключением указанных полей: +Оператор `rest (...)` может собрать неизвлечённые свойства в новый объект. Этот приём удобен, когда получаем объект, созданный на основе исходного объекта, за исключением указанных полей: ```js const point = {x: 120, y: 30, color: 'blue', opacity: 0.4} @@ -120,8 +120,7 @@ console.log(restPoint) // { x: 120, y: 30 } ``` -Деструктуризация может выполняться для объектов любой вложенности. -Допустим, у нас есть такой объект: +Деструктуризация может выполняться для объектов любой вложенности. Допустим, у нас есть такой объект: ```js const creator = { @@ -193,7 +192,7 @@ let bar; ## Деструктуризация массивов -При деструктуризации массива можете пропускать элементы, значения которых не нужно получать. Для пропуска элемента используют оператор `,`: +При деструктуризации массива можете пропускать элементы, значения которых получать не нужно. Для пропуска элемента используют оператор `,`: ```js const animals = ['🐱', '🐴', '🦆', '🐶', '🐸', '🐹'] @@ -215,7 +214,7 @@ console.log(duck, frog) // 🦆 🐸 ``` -Можно предусмотреть значения по умолчанию. Это понадобится, если массив пустой или имеет незаполненные элементы. +Можно предусмотреть значения по умолчанию. Понадобится, если массив пустой или в нём незаполненные элементы. ```js const options = Array(5) // [ <5 empty items> ] @@ -229,7 +228,7 @@ console.log(second) // undefined ``` -С помощью оператора `rest (...)` соберём в новый массив элементы,оставшиеся неизвлечёнными. +С помощью оператора `rest (...)` соберём в новый массив элементы, оставшиеся неизвлечёнными. ```js const numbers = [2, 4, 8, 16, 32 ,64] @@ -243,7 +242,7 @@ console.log(second) // [ 16, 32, 64 ] ``` -Учитывайте, что `rest`-оператор можно указать только последним, иначе произойдёт ошибка: +Учитывайте, что `rest`-оператор указывают последним, иначе произойдёт ошибка: ```js const numbers = [2, 4, 8, 16, 32 ,64] @@ -252,7 +251,7 @@ const [elem0, ...restNumbers, elemLast ] = numbers // SyntaxError: Rest element must be last element ``` -Также можете произвести деструктуризацию в массиве, образуемом rest-оператором: +Также можете произвести деструктуризацию в массиве, образуемом `rest`-оператором: ```js const numbers = [2, 4, 8, 16, 32 ,64] @@ -266,7 +265,7 @@ console.log(restNumbers) // [16, 32, 64] ``` -C помощью деструктуризации удобно извлекать значения из вложенных массивов. +С помощью деструктуризации удобно извлекать значения из вложенных массивов. ```js const numbers = [ @@ -305,7 +304,7 @@ const loadFileOption = createOption( ) ``` -Можем улучшить этот код, заменив множества отдельных параметров на один объект. Тут как раз и пригодится деструктуризация. За счёт минимальных изменений мы получаем: +Можем улучшить этот код, заменив множества отдельных параметров на один объект. Тут как раз и пригодится деструктуризация. За счёт минимальных изменений получаем: - названия свойств передаваемого объекта помогают понять смысл параметра; - нет необходимости строгого соблюдения порядка аргументов при вызове. @@ -361,7 +360,7 @@ const bookImages = images.filter((item) => { }) ``` -Деструктуризация поможет извлечь нужные свойства при передаче параметра в колбэк, что упростит код функции: +Деструктуризация поможет извлечь нужные свойства при передаче параметра в колбэк. Это упростит код функции: ```js const bookImages = images.filter(({data:{type, size:[width]}}) => { From ba1d08219518dd7430ded76fd4df7bc6da87c6b0 Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Sat, 28 Sep 2024 19:33:52 +0300 Subject: [PATCH 10/13] =?UTF-8?q?=D0=A3=D0=BF=D1=80=D0=BE=D1=89=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index 4af0715a3d..3808143bd0 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -322,7 +322,7 @@ const loadFileOption = createOption({ }) ``` -### Уточнение аргумента колбэк-функции во встроенных методах массива +### Уточнение аргумента колбэка в методах массива Допустим, мы хотим отфильтровать массив объектов на основе нескольких свойств: @@ -392,7 +392,7 @@ console.log(min, max) Рассмотрим несколько неочевидных возможностей применения деструктуризации. -### Как поменять местами значения двух переменных, используя только одну операцию? +### Обмен значений переменных одной операцией Скорее всего, этого не потребуется в реальном проекте, но такая возможность есть. From d2ffaf7dd9d9ba9dce46b53737bdba0e00fb4437 Mon Sep 17 00:00:00 2001 From: Vitya <9317613+vitya-ne@users.noreply.github.com> Date: Sat, 28 Sep 2024 19:34:19 +0300 Subject: [PATCH 11/13] Update js/destructuring-assignment/index.md Co-authored-by: Tatiana Fokina --- js/destructuring-assignment/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index 3808143bd0..b05d689cf2 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -8,7 +8,7 @@ related: - js/arrays - js/var-let tags: - - doka + - article --- ## Кратко From d1182519d70cb046fc07a71723de0e054f79b9af Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Sat, 28 Sep 2024 19:48:30 +0300 Subject: [PATCH 12/13] =?UTF-8?q?=D0=95=D1=89=D1=91=20=D1=83=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=89=D0=B0=D0=B5=D1=82=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index b05d689cf2..64d75579fc 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -371,7 +371,7 @@ const bookImages = images.filter(({data:{type, size:[width]}}) => { }) ``` -### Функция, возвращающая несколько значений +### Получение из функции нескольких значений Иногда удобно получать из функции несколько значений. Деструктуризация результата выполнения функции не создаст временный массив при получении: @@ -439,7 +439,7 @@ console.log(getDeviceParams()) // } ``` -### Получение первого и последнего элемента массива одной строкой кода +### Извлечение крайних элементов массива одной операцией Так как массив — это также и объект, с помощью деструктуризации можем извлекать его свойства. Разберём решения по частям. From 9cb1009de64bab536be3f99bf3503f3ff96480f6 Mon Sep 17 00:00:00 2001 From: vitya-ne <9317613+vitya-ne@users.noreply.github.com> Date: Sat, 28 Sep 2024 19:58:56 +0300 Subject: [PATCH 13/13] =?UTF-8?q?=D0=9C=D0=B5=D0=BD=D1=8F=D0=B5=D1=82=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/destructuring-assignment/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/destructuring-assignment/index.md b/js/destructuring-assignment/index.md index 64d75579fc..50a95921ce 100644 --- a/js/destructuring-assignment/index.md +++ b/js/destructuring-assignment/index.md @@ -407,7 +407,7 @@ console.log(a, b) // 16 8 ``` -### Копирование значений из одного объекта в другой +### Копирование свойств в объект При деструктуризации объекта извлекаемые значения можно напрямую помещать в другой, ранее созданный объект: