Разрушение объектов в Javascript - это концепция, которую я использую все чаще и чаще с момента появления ES6. По определению MDN, деструктуризацию можно понять как присвоение без объявления. Надеюсь, это станет более ясным, когда я покажу несколько примеров. Я начал читать книгу Кайла Симпсона «ES6 and Beyond» (хорошее чтение, хотя и насыщенное), но обнаружил, что застрял на главе о деструктуризации и постоянно перечитываю в течение последних нескольких дней. Я недавно глубоко погрузился в Node, поэтому, когда я модулирую свое промежуточное ПО в контроллеры, я обнаружил, что деструктурирую их, чтобы немного очистить код, и вставлял их в свои маршруты Express. Однако я знал, что деструктуризация - это нечто большее, поэтому я пошел и начал пытаться узнать о ней побольше. Я хочу повторить то, что я понял по этой теме, с помощью некоторых упрощенных примеров.
Это простой на вид объект, который, вероятно, узнает каждый. Он следует за синтаксисом key (property): value, который мы привыкли видеть. Ниже я написал простой пример того, как я могу деструктурировать объект, чтобы установить две постоянные переменные, равные значениям, присвоенным ключам в объекте. Позволь мне показать тебе:
let x = 1, y = 2; let obj = { a: x, b: y }; const {a,b} = obj; console.log(a,b) //1,2
Итак, здесь я установил две константы «a» и «b», равные значениям ключа «a» и «b», присвоенным в «obj». А что по-другому? Прежде всего, мы напрямую назначаем ‘a, b’ внутри фигурных скобок в левой части выражения, которое оценивается по ключам / значениям определенного объекта выше. Когда мы записываем «a, b», мы видим (1,2). Таким образом, возникает вопрос, получаем ли мы ключ или значение от деструктурированного объекта «obj». Что ж, в этом случае это трудно увидеть, но на самом деле мы получаем значение (1 или 2), и поскольку константа, которую мы объявляем, совпадает с ключом, мы можем просто присваивать переменные таким образом. Однако, чтобы проиллюстрировать, что мы на самом деле получаем значение, важно понимать, что деструктуризация переворачивает ключ: значение в большее, чем значение: ключ, по крайней мере, так я это понимаю.
Пример:
const w = 2, i = 3, q = 4; const hello = { hi:w, //2 hello:i, // 3 hey:q // 4 } const {hi:Mike,hello:Jimmy,hey:Ryan} = hello console.log(Mike,Jimmy,Ryan); //2 3 4
Итак, в этом примере мы видим, что объявляемые нами переменные противоположны тем, к которым мы привыкли. Объект hello находится в правой части объявления, и мы назначаем ключи hello нашим новым объявлениям
const, слева от:, а правая сторона является ключом, который ссылается на значение в объект (привет) деструктурируется.
То же самое и с массивами. Мы можем деструктурировать массивы, используя аналогичный синтаксис, и можем присвоить имя свойства значению в зависимости от того, где
значение находится в массиве.
const arr = [1,2,3]; const testObj = {}; [testObj.val, testObj.val2, testObj.val3] = arr; console.log(testObj); //{val: 1, val2: 2, val3: 3}
В другом примере силы деструктуризации давайте посмотрим, как мы обычно подходим к переключению двух переменных.
let x = 1; let y = 2; let temp = x; x = y; y = temp;
Однако мы можем использовать деструктуризацию, чтобы упростить этот процесс.
let var1 = 1, var2 = 2; [var1,var2] = [var2,var1]; console.log(var1,var2); // 2,1
Наконец, мы можем переупорядочить массив с помощью деструктуризации
const order = [1,2,3,4]; const newOrder = []; [newOrder[3],newOrder[2],newOrder[1],newOrder[0]] = order; console.log(newOrder); / 4,3,2,1
Если мы поймем эти простые примеры, мы сможем увидеть силу деструктуризации в действии и теперь можем представить себе возможности с ее помощью. Я хотел бы повторить, что многое из того, о чем я пишу, можно найти в мельчайших подробностях в книге Кайла Симпсона, и это лишь верхушка айсберга в том, что вы хотите знать о деструктуризации. Ментальная модель переключения ключ: значение, подобная синтаксису в деструктуризации, потребовала у меня немного времени, чтобы привыкнуть к ней. Однако я хотел поделиться некоторыми вещами, которые я узнал, и надеюсь увидеть, что люди применяют эти концепции, если они еще не сделали этого.