Установка значений по умолчанию для каждого ключа в разобранном вложенном объекте в JavaScript - PullRequest
0 голосов
/ 20 марта 2019

В общем, я знаю, как деконструировать простой объект в Javascript. Я также знаю, как давать значения по умолчанию для простых объектов во время деконструкции.

Например, я могу передать два разных вложенных объекта в функцию логгера. Где функция регистратора просто консоль регистрирует вложенный массив

var firstExample = { name: "foo", number: 1, myObject: { myArray: [1, 2, 3] } };
var secondExample = { name: undefined, number: undefined, myObject: { myArray: [9, 8, 7] } };

var myLogger = ({
  name = "defaultName",
  number = 999,
  myObject: { myArray: stuff }
}) => {
  console.log(`${name} ${stuff}`);
};

myLogger(firstExample); // "foo 1,2,3"
myLogger(secondExample); // "defaultName 9,8,7"

В настоящее время, однако, я борюсь с деконструкцией вложенного объекта и передачей ему значений для каждой вложенной пары ключ / значение.

Например, когда я пытаюсь добавить следующий код с использованием той же функции myLogger, выдается ошибка TypeError.

var myLogger = ({
  name = "defaultName",
  number = 999,
  myObject: { myArray: stuff }
}) => {
  console.log(`${name} ${stuff}`);
};
var thirdExample = { name: "bar", number: 2 };

myLogger(thirdExample) // ERROR
// TypeError: Cannot destructure property `myArray` of 'undefined' or 'null'.

Как правильно написать свою функцию для деконструкции объекта, чтобы избежать этой ошибки?

1 Ответ

3 голосов
/ 20 марта 2019

Как следует из ошибки:

Невозможно уничтожить свойство myArray из 'undefined' или 'null'.

Родительский объект (myObject) должен иметь значение по умолчанию пустого объекта, чтобы из него можно было извлечь (возможно существующее) свойство myArray (и, возможно, присвоить ему значение по умолчанию):

var myLogger = ({
  name = "defaultName",
  number = 999,
  myObject: { myArray: stuff } = {}  // <-------
}) => {
  console.log(`${name} ${stuff}`);
};
var thirdExample = { name: "bar", number: 2 };

myLogger(thirdExample) // ERROR
// TypeError: Cannot destructure property `myArray` of 'undefined' or 'null'.

Для назначения значения по умолчанию:

var myLogger = ({
  name = "defaultName",
  number = 999,
  myObject: { myArray: stuff = 'stuffDefault' } = {}  // <-------
}) => {
  console.log(`${name} ${stuff}`);
};
var thirdExample = { name: "bar", number: 2 };

myLogger(thirdExample) // ERROR
// TypeError: Cannot destructure property `myArray` of 'undefined' or 'null'.

Обратите внимание, что это также сгенерирует, если функция вызывается без параметров:

var myLogger = ({
  name = "defaultName",
  number = 999,
  myObject: { myArray: stuff = 'stuffDefault' } = {}  // <-------
}) => {
  console.log(`${name} ${stuff}`);
};
var thirdExample = { name: "bar", number: 2 };

myLogger()

Таким образом, вы можете назначить значение по умолчанию для целого параметра тоже:

var myLogger = ({
  name = "defaultName",
  number = 999,
  myObject: { myArray: stuff = 'stuffDefault' } = {}
} = {}) => {  // <-------
  console.log(`${name} ${stuff}`);
};
var thirdExample = { name: "bar", number: 2 };

myLogger()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...