Π”Π΅Π»Π°Π΅ΠΌ ΠΊΠΎΠ΄ Ρ‡ΠΈΡ‰Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дСструктуризации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² JavaScript

РассказываСм, ΠΊΠ°ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΎΠ²ΠΎΠ³ΠΎ синтаксиса дСструктуризации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ массивов Π² JavaScript.

ОблоТка: Π”Π΅Π»Π°Π΅ΠΌ ΠΊΠΎΠ΄ Ρ‡ΠΈΡ‰Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дСструктуризации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² JavaScript

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ сравним Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ использованиС Π½ΠΎΠ²ΠΎΠ³ΠΎ синтаксиса дСструктуризации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² JavaScript стандарта ES6. Π­Ρ‚ΠΎΡ‚ синтаксис позволяСт Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ значСния ΠΈΠ· слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ массивов. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‡ΠΈΡ‰Π΅ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Π΅Π΅.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ обсудим Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ массивам.

ДСструктуризация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² JS

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий простыС свойства ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»Π΅:

			const customer = {
     name: 'Sherlock',
     email: 's.h.@gmail.com',
     age: 34,
     address: {
         streetNo: '221b Baker Street',
         city: 'London',
         country: 'UK' 
    }
}
		

Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ присваиваниС

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈΠ»ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки:

			const name = customer.name;
const email = customer['email']; 

console.log(name) // Sherlock
console.log(email) // s.h.@gmail.com
		

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ строкой ΠΊΠΎΠ΄Π°:

			const { name, email } = customer;

console.log(name) // Sherlock
console.log(email) // s.h.@gmail.com
		

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

			const { name: customerName, email } = customer;

console.log(customerName) // Sherlock
		

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ

Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки:

			let name, email;

({ name, email } = customer);

console.log(name)
console.log(email)
		

ΠšΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½ΡƒΠΆΠ½Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ { слСва воспринимаСтся ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊ, Π° Π½Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π‘Π΅Π· скобок ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

			{ name, email } = customer;
                ^SyntaxError: Unexpected token '='
		

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ свойства ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ:

			const name = customer.name;
const streetNo = customer.address.streetNo;
const city = customer['address']['city'];

console.log(name) // Sherlock
console.log(streetNo) // 221b Baker Street
console.log(city) // London
		

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дСструктуризации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² JS этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ строку:

			const { name,  address: {  streetNo, city } } = customer;

console.log(name) // Sherlock
console.log(streetNo) // 221b Baker Street
console.log(city) // UK
		

ДСструктуризация со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Допустим, Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° customer Π΅ΡΡ‚ΡŒ Π±ΡƒΠ»Π΅Π²ΠΎ ΠΏΠΎΠ»Π΅ married, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ значСния. Π‘Π΅Π· дСструктуризации ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ значСния ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

			let married = customer.married;

console.log(married); // undefined

if (!married) {
   married = 'N/A';
}
console.log(married); // N/A
		

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дСструктуризации ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π² ΠΎΠ΄Π½Ρƒ строку:

			const { name, married = 'N/A' } = customer;

console.log(name) // Sherlock
console.log(married) // N/A
		

ΠžΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ многоточия ΠΈ любого ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹. Для Π½ΠΈΡ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ имя rest:

			const { name, ...rest } = customer;

console.log(name) // Sherlock
console.log(rest) // {
                  //    email: 's.h.@gmail.com',
                  //    age: null,
                  //    address: { streetNo: '221b Baker Street', city: 'London', country: 'UK' }
                  // }
		

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° null-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Если ΠΌΡ‹ попытаСмся Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ null-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ:

			function getCustomer() {
    return null;
}

let { name, email } = getCustomer() || {};

console.log(name, email); // undefined undefined
		

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π˜Π›Π˜ ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ null пустым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

ДСструктуризация Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π‘Π½Π°Ρ‡Π°Π»Π° посмотрим, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· дСструктуризации:

			let display = (customer) => console.log(`${customer.name} ${customer.address.city}`);

display(customer);
		

А Ρ‚Π°ΠΊ выглядит дСструктуризация ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

			let display = ( { name, address: {city} } ) => console.log(`${name} ${city}`);

display(customer);
		

ДСструктуризация массивов Π² JS

Бинтаксис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ использовали для дСструктуризации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΠΊ массивам. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, дСструктуризация массивов ΠΈΠΌΠ΅Π΅Ρ‚ интСрСсныС особСнности. Для ΠΈΡ… дСмонстрации Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив Ρ„Ρ€ΡƒΠΊΡ‚ΠΎΠ²:

			const fruits = ["Banana", "Orange", "Apple", "Mango"];
		

Доступ ΠΊ элСмСнтам массива Ρ‡Π΅Ρ€Π΅Π· Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

			let [firstFruit, secondFruit] = fruits;

console.log(firstFruit); // Banana
console.log(secondFruit); // Orange
		

ΠŸΡ€ΠΎΠΏΡƒΡΠΊ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΉ элСмСнт массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ запятая:

			let [yourFav, , ...friendsFav] = fruits;

console.log(yourFav); // Banana
console.log(friendsFav); // [ 'Apple', 'Mango' ]
		

ДСструктуризация Π² JS с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ элСмСнтов

			let [firstFruit, secondFruit] = fruits;

console.log(firstFruit); // Banana
console.log(secondFruit); // Orange

[firstFruit, secondFruit] = [secondFruit, firstFruit]

console.log(firstFruit); // Orange
console.log(secondFruit); // Banana
		
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ