Es6: короткая версия для деструктуризации - PullRequest
0 голосов
/ 28 августа 2018

Есть ли способ написать следующий код немного короче?

const { user } = JWT.verify(req.params.token, keys.secretOrKey);
const { email } = user;

Мне нужно только свойство email от JWT.

Данные, возвращаемые из JWT.verify(), являются объектами:

user: {
    name: 'the name',
    email: 'email@address.com',
    ...
}

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Да, вы можете просто написать

const {user:{email}} = JWT.verify(req.params.token, keys.secretOrKey);

let test = { user: {
    name: 'the name',
    email: 'email@address.com'
    }}

const {user:{email}} = test;

console.log("user",typeof user);
console.log("email",email)

Как видите, установлено только email, user не определено.

Обратите внимание, что это будет работать только в том случае, если определено user, в противном случае возникнет ошибка.

Вы также можете установить значение по умолчанию для объекта user, например:

let test = {/** user: {
    name: 'the name',
    email: 'email@address.com'
    }**/}

const {user:{email}={}} = test;

console.log("user",typeof user);
console.log("email",email)

чтобы не выдавала ошибку, если user не определено

0 голосов
/ 28 августа 2018

Как уже упоминалось в комментариях:

const myFunction = {
  user: {
    name: 'the name',
    email: 'email@address.com'
  }
}

const {
  email
} = myFunction.user

console.log(email)
0 голосов
/ 28 августа 2018

Разрушающее задание достаточно мощное:

// shim for example
const JWT = { verify: () => ({
  user: {
    email: 'me@me.me',
    name: 'snek',
  }, 
}) };

///////////////////

const { user: { email } } = JWT.verify();

console.log(email);

Обратите внимание, что user здесь не объявлено.

Подробнее здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

...