После прохождения подготовительного этапа учебного курса по кодированию Flatiron School я довольно много узнал о темах JavaScript, включая массивы/объекты, и самая важная часть массивов и объектов была упомянута в последнем модуле сразу после лаборатории Object Ball. По моему мнению, деструктуризация могла бы предшествовать лаборатории, потому что это была очень мощная техника, которая позволила мне быстро пройти через то, что в противном случае было бы очень утомительным и трудным лабораторным. Это будет моя первая попытка объяснить техническую тему, связанную с кодом JavaScript, и я пишу это, чтобы внести ясность в эту технику, которую я включил в свою лабораторию Object Ball и свой проект API. Деструктуризация — это метод присваивания, который имеет дело с массивами и объектами. Впервые он был представлен в синтаксисе JavaScript в версии ES6 JavaScript.
Деструктуризация позволяет вам обойти необходимость использования точечной или квадратной нотации для объектов, например, для этого объекта:
const exampleObj = { name: "Jamaal" address: "2450 Thomas Ave"
если вы хотите получить доступ к свойству имени внутри объекта, вы можете использовать традиционный синтаксис и сохранить свойство в переменной, как показано ниже.
const exampleName = exampleObj.name const objName = exampleObj['name']
с деструктурированием вы можете просто создать переменную для каждого свойства в объекте, ссылаясь на ключи в объекте и делая их переменными.
const {name, address} = exampleObj console.log(`Hello, my name is ${name} and I live on ${address}.` // Hello, my name is Jamaal and I live on 2450 Thomas Ave.
Сила деструктурирования объектов становится очевидной при работе с вложенными объектами, такими как тот, с которым я столкнулся в своей лаборатории Object Ball.
С вышеприведенным объектом у нас есть объект player всех игроков и их статистика, но они вложены в объекты дома и на выезде для каждой команды соответственно. Чтобы получить доступ к статистике очков домашнего игрока «Алан Андерсон» без деструктуризации, вам нужно будет использовать следующий синтаксис.
gameObject().home.players["Alan Anderson"].points
С помощью деструктуризации мы можем сегментировать подобъект игроков для домашнего объекта, установив переменную для объекта игроков с деструктурированием.
const { home: {players}= gameObject() players["Alan Anderson"].points
вам нужно поместить игроков в скобки {}, чтобы мы могли выполнить вложенную деструктуризацию, но здесь есть проблема, и домашний объект, и удаленный объект имеют один и тот же ключ игроков, и поскольку мы используем const для установки переменных с помощью наша техника деструктурирования, казалось бы, не позволит нам нацеливаться на объекты игроков как дома, так и вдали. С этим можно обойти, мы просто назначаем новое имя для ключа игроков как для домашних, так и для выездных объектов.
const { home: { players: homePlayers }, away: { players: awayPlayers } } = gameObject()
Этот метод очень удобен при работе с похожими ключами вложенных объектов.
Это еще один метод, который очень эффективен при деструктуризации, и это возможность использовать переменную использования для деструктуризации внутри функции. Я использовал эту технику в своем проекте для получения API. Допустим, у вас есть данные JSON, которые представляют собой объект данных, который вы можете использовать для заполнения веб-страницы путем манипулирования DOM.
fetch(`https://api.polygon.io/v2/snapshot/locale/us/markets/stocks/tickers/${tickerSymb}?apiKey=HRJaobcNSX77koktspcX6RhjjQ1aw4W5`) .then(response => response.json()) .then(data => { const { ticker: {day}} = data renderStockTable(tickerSymb,day)
Мы можем взять данные из JSON и деструктурировать их, чтобы иметь легкий доступ к содержащимся в них компонентам. Данные, которые я извлекаю, — это данные биржевого тикера, а объект дня имеет ключи, которые представляют колебания цены для символа тикера, который я передаю через событие отправки для своего приложения. Я хочу взять каждый из этих ключей c: для цены при закрытии рынка, h: для максимальной цены, l: для минимальной цены, o: цены при открытии рынка, v: для объема сделок, vw для средневзвешенной цены и поместить их в таблице как табличные данные. В функции renderStockTable я передаю переменную дня в функцию, которая представляет объект
"request_id": "4070d186a2380f9385b5904cec5fd1a6", "status": "DELAYED", "ticker": { "day": { "c": 137.35, "h": 141.66, "l": 136.6, "o": 139.88, "v": 136077468, "vw": 138.6621 }, "min": { "av": 136077468, "c": 138.3, "h": 138.3, "l": 138.22, "o": 138.22, "v": 3481, "vw": 138.2578 }, "prevDay": { "c": 140.82, "h": 147.3601, "l": 139.9, "o": 146.85, "v": 109742890, "vw": 142.6901 }, "ticker": "AAPL", "todaysChange": -2.52, "todaysChangePerc": -1.79, "updated": 1653004800000000000 } }
Затем я деструктурирую этот объект с помощью функции renderStockTable в глобальной области видимости и передаю каждую из этих переменных в качестве аргументов. Затем я присваиваю каждой из этих переменных текстовое содержимое для каждого из элементов данных таблицы, которые я создаю для добавления в свою таблицу с идентификатором «stock-table».
function renderStockTable(ticker,{c, h, l, o, v, vw}) { const table = document.getElementById('stock-table') const tableRow = document.createElement("tr") tableRow.classList.add('style-new-row') const tableHead = document.createElement('th') const tableBody = document.createElement('tb') const closingPrice = document.createElement('td') const priceHigh = document.createElement('td') const priceLow = document.createElement('td') const openPrice = document.createElement('td') const tradingVol = document.createElement('td') const deleteRow = document.createElement('td') const weightAveragePrice = document.createElement('td') const deleteBtn = document.createElement('button') deleteBtn.type = "button" tableHead.textContent = `${ticker}` closingPrice.textContent = `${c}` priceHigh.textContent = `${h}` priceLow.textContent = `${l}` openPrice.textContent = `${o}` tradingVol.textContent = `${v}` weightAveragePrice.textContent = `${vw}` tableRow.append(tableHead, closingPrice, priceHigh, priceLow, openPrice, tradingVol, weightAveragePrice, deleteRow) table.append(tableRow) deleteRow.append(deleteBtn) deleteBtn.innerText = "Delete" deleteBtn.addEventListener('click', (e) => e.target.parentNode.parentNode.remove()) }
В своих исследованиях я читал во многих частях Интернета, что деструктурирование аргумента функции является обычным явлением в таких средах, как REACT. быть частью 2 серии. Я надеюсь, что внес некоторую ясность в деструктурирование объектов и его множество удобных применений, и увидимся во второй части.