Ошибка объявления переменных и путаница при деструктуризации объектов JavaScript

#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.