«Деструктуризация позволяет распаковывать значения из массивов или свойства объектов в отдельные переменные».

Приведенное выше утверждение определяет стандартное определение деструктуризации в javascript. Здесь мы попытаемся понять концепцию деструктурирования немного подробнее.

«Деструктуризация позволяет распаковывать значения из массивов».

Сначала определим массив

let array = [1, 2, 3];

«Деструктуризация позволяет распаковывать значения из массивов в отдельные переменные».

Сейчас мы попытаемся понять это утверждение на примере —
распаковать значения из массивов в отдельные переменные

Допустим, нам нужно присвоить значение из массива отдельным переменным. Легкий !!! Хорошо, давайте сделаем это

Традиционный способ

let array = [1, 2, 3];

let a = array[0];
console.log(a);
// Expected output: 1

let b = array[1];
console.log(b);
// Expected output: 2

let c = array[2];
console.log(c);
// Expected output: 3

Es6 — Способ разрушения

let array = [1, 2, 3];

let a, b, c;

[a, b, c] = array;

console.log(a);
// Expected output: 1

console.log(b);
// Expected output: 2

console.log(c);
// Expected output: 3

Давайте рассмотрим еще несколько вариантов, чтобы лучше понять деструктурирование.

let array = [1, 2, 3];
[a,b,c] = array; // No need to declare variable a, b, c explicitly 
console.log(a);
// Expected output: 1

console.log(b);
// Expected output: 2

console.log(c);
// Expected output: 3

Что делать, если переменные меньше размера массива?

let array = [1, 2, 3];
[a, b] = array;

console.log(a);
// Expected output: 1

console.log(b);
// Expected output: 2

console.log(c);
// Expected output: Uncaught ReferenceError: c is not defined

-------------------------------------------------------------------

//Another example, this time lets define 'c'

let array = [1, 2, 3];
let c;
[a, b] = array;

console.log(a);
// Expected output: 1

console.log(b);
// Expected output: 2

console.log(c);
// Expected output: undefined

Что делать, если переменные больше, чем размер массива?

let array = [1, 2, 3];
[a, b, c, d] = array;

console.log(d);
// Expected output: undefined

Разрушение с помощью оператора (…) Rest.

let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
[a, b] = array;

console.log(a);
// Expected output: 1

console.log(b);
// Expected output: 2

----------------------- With Rest Operator -------------------------------
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
[a, b, ...c] = array;

console.log(a);
// Expected output: 1

console.log(b);
// Expected output: 2

console.log(c);
// Expected output: [3, 4, 5, 6, 7, 8, 9, 10] // Yes we get an array.

«Деструктуризация позволяет распаковывать значения из объектов».

Давайте сначала определим объект.

const employee = {
  name: "Ajinkya",
  id: 12345,
  department: "Engineering"
}

«Деструктуризация позволяет распаковывать значения из объектов в отдельные переменные».

Сейчас мы попытаемся понять это утверждение на примере —
распаковать значения из объекта в отдельные переменные

Допустим, нам нужно присвоить значение объекта отдельным переменным. Легкий !!! Правильно, давайте

Традиционный способ

const employee = {
  name: "Ajinkya",
  id: 12345,
  department: "Engineering"
}

const name = employee.name;
const id = employee.id;
const department = employee.department;

console.log(name);
// Expected output: Ajinkya

console.log(id);
// Expected output: 12345

console.log(department);
// Expected output: Engineering

Es6 — Способ разрушения

const employee = {
  name: "Ajinkya",
  id: 12345,
  department: "Engineering"
}

const {name, id, department} = employee;

console.log(name);
// Expected output: Ajinkya

console.log(id);
// Expected output: 12345

console.log(department);
// Expected output: Engineering

Имя переменной имеет значение!!!

Имя переменной и имя свойства объекта должны совпадать при деструктурировании объектов. Давайте посмотрим это на примере.

const employee = {
  name: "Ajinkya",
  id: 12345,
  department: "Engineering"
}

const {name, id, dept} = employee;
console.log(dept);
// Expected output: undefined

Здесь, в приведенном выше примере, у нас есть несоответствие имени переменной «отдел» и имени свойства объекта «отдел», поэтому при деструктуризации не удается сопоставить значение отдела с переменной «отдел».

Значит ли это, что мы не можем использовать разные имена для нашей переменной при деструктуризации?

Ответ: Нет, мы можем иметь другие имена для нашей переменной, отличные от тех, которые определены в объектах. (Мы, программисты, обычно любим давать переменным более осмысленные имена!!)

Давайте посмотрим на это в действии.

const employee = {
  name: "Ajinkya",
  id: 12345,
  department: "Engineering"
}

const {name, id, department:dept} = employee;

console.log(dept);
// Expected output: Engineering

Деструктуризация также помогает при назначении значений по умолчанию.

Если в нашем объекте отсутствует какое-либо свойство, мы можем добавить значение по умолчанию для всех отсутствующих свойств с помощью деструкции. Давайте посмотрим это.

const employee = {
  name: "Ajinkya",
  id: 12345,
  department: "Engineering"
}

const {name, id, department, company} = employee;

console.log(company);
// Expected output: undefined

---------------------- With Default Value ---------------------------

const employee = {
  name: "Ajinkya",
  id: 12345,
  department: "Engineering"
}

const {name, id, department, company="Winsoft"} = employee;

console.log(company);
// Expected output: Winsoft

Деструктуризация с параметрами функции

Мы определим функцию для печати сведений о сотруднике

const employee = {
  name: "Ajinkya",
  lastName: "Dhote"
  id: 12345,
  department: "Engineering"
  city: "Pune",
  country: "India",
  experience: 6,
  title: "Fullstack Developer"
  skills: [
    {
      "tech": "Java",
      "experience": 6
    },
    {
      "tech": "Javascript",
      "experience": 5
    },
    {
      "tech": "Angular",
      "experience": 4
    },
    {
      "tech": "React",
      "experience": 4
    }
  ]
}

function printEmployeeDetails(emp) {
    const name = emp.name;
    const lastName = emp.lastName;

    console.log("Name of employee: " + name + " " + lastName);
}


printEmployeeDetails(employee);
// Expected Output: Employee: Ajinkya Dhote

--------------------------- Destructuring ---------------------------------

function printEmployeeDetails(emp) {
    const {name, lastName} = emp

    console.log("Name of employee: " + name + " " + lastName);
}

printEmployeeDetails(employee);
// Expected Output: Name of employee: Ajinkya Dhote


---------------------------Again Destructuring  ----------------------------

function printEmployeeDetails({name, lastName}) { <<--- Notice the parameters

    console.log("Name of employee: " + name + " " + lastName);
}

printEmployeeDetails(employee);
// Expected Output: Name of employee: Ajinkya Dhote

----------------------Destructuring with variable rename -------------------

function printEmployeeDetails({name, lastName: surname}) { <<--- Notice the parameters

    console.log("Name of employee: " + name + " " + surname);
}

printEmployeeDetails(employee);
// Expected Output: Name of employee: Ajinkya Dhote


----------------------Destructuring with default value -------------------

function printEmployeeDetails({name, lastName: surname, company="Winsoft"}) {

    console.log("Name of employee: " + name + " " + surname + ", from: " + company);
}

printEmployeeDetails(employee);
// Expected Output: Name of employee: Ajinkya Dhote, from: Winsoft

Хотите узнать больше

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment