Готовый перевод Modern JS Cheatsheet / Памятка по современному JavaScript: Деструктуризация объектов и массивов

### Деструктуризация объектов и массивов

*Деструктуризация* — это удобный способ создавать новые переменные, напрямую получая значения из объектов или массивов.

На практике *деструктуризацию* можно использовать, чтобы присваивать переменные, разбивая на части параметры функции или *this.props* в React-проектах.

#### Объяснение с примером кода

- Объект

Давайте использовать во всех примерах следующий объект:

```js
const person = {
firstName: "Коля",
lastName: "Андреев",
age: 35,
sex: "М"
}
```

Без деструктуризации

```js
const first = person.firstName;
const age = person.age;
const city = person.city || "Санкт-Петербург";
```

С деструктуризацией всё поместится в одну строчку:

```js
const { firstName: first, age, city = "Санкт-Петербург" } = person; // И всё!

console.log(age) // 35 -- Создана новая переменная age и ей присвоено значение, равное person.age
console.log(first) // "Коля" -- Создана новая переменная first и ей присвоено значение, равное person.firstName
console.log(firstName) // Undefined -- person.firstName существует, НО новая созданная переменная называется first
console.log(city) // "Санкт-Петербург" -- Создана новая переменная city и, поскольку свойство person.city ранее не было определено, переменной присвоено альтернативное значение "Санкт-Петербург".
```

**Примечание:** В `const { age } = person;` скобки после ключевого слова *const* не используются для определения объекта или блока. Это синтаксис самой *деструктуризации*.

- Параметры функции

*Деструктуризация* часто используется, чтобы разбить на части параметры в функциях.

Без деструктуризации

```js
function joinFirstLastName(person) {
const firstName = person.firstName;
const lastName = person.lastName;
return firstName + '-' + lastName;
}

joinFirstLastName(person); // "Коля-Андреев"
```

Если деструктурировать параметр *person*, то функция выйдет куда короче:

```js
function joinFirstLastName({ firstName, lastName }) { // мы создали переменные firstName и lastName из частей параметра person
return firstName + '-' + lastName;
}

joinFirstLastName(person); // "Коля-Андреев"
```

Ещё удобнее использовать деструктуризацию со [стрелочными функциями](#arrow_func_concept):

```js
const joinFirstLastName = ({ firstName, lastName }) => firstName + '-' + lastName;

joinFirstLastName(person); // "Коля-Андреев"
```

- Массив

Давайте рассмотрим следующий массив:

```js
const myArray = ["a", "b", "c"];
```

Без деструктуризации

```js
const x = myArray[0];
const y = myArray[1];
```

С использованием деструктуризации

```js
const [x, y] = myArray; // И это всё!

console.log(x) // "a"
console.log(y) // "b"
```

#### Полезные ресурсы

- [Особенности ES6 - Деструктурирующее присваивание](http://es6-features.org/#ArrayMatching)
- [Деструктуризация объектов - WesBos](http://wesbos.com/destructuring-objects/)
- [ExploringJS - Деструктуризация](http://exploringjs.com/es6/ch_destructuring.html)

Переведено на Нотабеноиде
http://notabenoid.org/book/70916/381877

Переводчики: wizjer

Настройки

Готово:

100.00% КП = 1.0