#javascript #object #destructuring
Вопрос:
У меня есть объект ресторана, в котором есть вложенные объекты
const restaurant = {
name1: 'Classico Italiano',
location1: 'Via Angelo Tavanti 23, Firenze, Italy',
categories: ['Italian', 'Pizzeria', 'Vegetarian', 'Organic'],
starterMenu: ['Focaccia', 'Bruschetta', 'Garlic Bread', 'Caprese Salad'],
mainMenu: ['Pizza', 'Pasta', 'Risotto'],
typeofManpower,
parcelAvailable,
openingHours: {
thu: {
open: 12,
close: 22,
},
fri: {
open: 11,
close: 23,
},
sat: {
open: 0, // Open 24 hours
close: 24,
},
},
}
Ниже приведен код, в котором я показал некоторый код деструкции объектов.
const {openingHours:{sat:{open:satOpen,close:satClose}}}=restaurant;
console.log(satOpen,satClose);
const {fri:{open:friOpen,close:friClose}}=restaurant.openingHours;
console.log(friOpen,friClose);
const {open:thuOpen,close:thuClose}=restaurant.openingHours.thu;
console.log(thuOpen,thuClose);
Я пробовал цепляться за RHS. когда я удаляю const из LHS, это выдает ошибку, что переменная satOpen/friopen/thuOpen не объявлена.
Однако у меня есть другой объект, где есть 2 футбольные команды и есть вложенный объект «коэффициенты» со свойствами
const game = {
team1: 'Bayern Munich',
team2: 'Borrussia Dortmund',
players: [
['Neuer','Pavard','Martinez','Alaba','Davies','Kimmich','Goretzka','Coman', 'Muller','Gnarby','Lewandowski',],
['Burki','Schulz','Hummels','Akanji','Hakimi','Weigl','Witsel','Hazard','Brandt','Sancho','Gotze',],
],
score: '4:0',
scored: ['Lewandowski', 'Gnarby', 'Lewandowski',
'Hummels'],
date: 'Nov 9th, 2037',
odds: {
team1: 1.33,
x: 3.25,
team2: 6.5,
},
printGoals: function(...playerNames){
console.log(playerNames.length);
for(let i in playerNames)
console.log(playerNames[i]);
}
};
Я попытался выполнить следующий код для деструктурирования. Однако этот код работает, даже если в LHS нет const/let.
({team1:group1,x:draw,team2:group1} = game.odds);
Следовательно, в первой ситуации возникает ошибка, когда const/let не используется в объявлении переменной. Во втором случае такой ошибки нет. Пожалуйста, ведите.
Комментарии:
1. Не могли бы вы более четко сформулировать вопрос и структуру объекта.
2. пожалуйста, добавьте содержание
restaurant
в буквальном обозначении. каков желаемый результат всего этого?3. Лайнус, твой вопрос нуждается в некоторой ясности. Я не могу различить, какой объект вы вложили в объект ресторана. Пожалуйста, используйте инструмент редактора Stackoverflow для форматирования кода и, возможно, представления вашего запроса в какой-либо читаемой форме.
Ответ №1:
Я смотрю, что вы возвращаете те же переменные ( open
, close
). Это невозможно сделать, объявив их снова с const
тем же блоком или let
в том же блоке.
В противоположность var
тому , где объявление поднимается для запуска кода или функции.
Комментарии:
1. Нина, даже несмотря на то, что открытие и закрытие объявляются несколько раз, значения немедленно присваиваются различным переменным, что делает открытие и закрытие снова свободными. Функция работает с const или let. Проблема возникает, когда они удаляются. Во втором случае кода ({team1:group1, x:ничья,team2:group1} = игра.шансы); отлично работает без const или let.