Как условно деструктурировать на объекте? - PullRequest
0 голосов
/ 04 марта 2020

У меня следующая деструктуризация:

const {
    user: {
        username,
        image,
        uid
    } = {},
    gallery: {
        image: picture,
    } = {},
} = data

Проблема в том, что gallery иногда null (не picture в gallery), хотя мне нужно picture в пределах gallery, когда он существует. Другими словами, gallery: null, а не gallery.image: null.

Поэтому я получаю:

null не является объектом

сообщение об ошибке для gallery.image.

Как условно деструктурировать, чтобы gallery.image использовался, когда он существует, но gallery не разрушался при нулевом значении?

1 Ответ

3 голосов
/ 04 марта 2020

Откаты работают только когда значение undefined, но не null

  • Это будет работать:

const data = {
  user: {
    username: 'Alice',
    image: 'alice.png',
    uid: 1
  },
  gallery: undefined
};

const {
    user: {
        username,
        image,
        uid
    } = {},
    gallery: {
        image: picture,
    } = {},
} = data;

console.log(username, image, uid, picture);
  • Но это не так:

const data = {
  user: {
    username: 'Alice',
    image: 'alice.png',
    uid: 1
  },
  gallery: null
};

const {
    user: {
        username,
        image,
        uid
    } = {},
    gallery: {
        image: picture,
    } = {},
} = data;

console.log(username, image, uid, picture);

Таким образом, вы можете вручную создать запасной вариант от null до {}, прежде чем уничтожить его следующим образом:

const data = {
  user: {
    username: 'Alice',
    image: 'alice.png',
    uid: 1
  },
  gallery: null
};

const {
    user: {
        username,
        image,
        uid
    } = {},
    gallery: {
      image: picture,
    }
} = {...data, gallery: data.gallery || {}};

console.log(username, image, uid, picture);
...