Как использовать деструктурирующее назначение внутри объекта - PullRequest
1 голос
/ 26 июня 2019

Можно ли использовать присвоение деструктурирования внутри объекта?

Это работает

        const test = {a: 'hey', b: 'hello'}
        const {a,b} = test;
        const destruct = {
            a,
            b
        };

хотел бы сделать это

    const test = {a: 'hey', b: 'hello'}
    // something like this
    const destruct = {
        {a,b}: test
    };

    const destruct = {
        {a}: test,
        {b}: test
    };

Ответы [ 3 ]

2 голосов
/ 26 июня 2019

Если я правильно понимаю, кажется, синтаксис распространения хорошо подходит для того, что вам нужно.

Синтаксис расширения "..." позволяет вам "распространять" пары ключ / значение от исходного объекта (например, test) к целевому объекту (например, destruct):

const test = {
  a: 'hey',
  b: 'hello',
  c: 'goodbye'
}

const destruct = {
  // {a,b}: test <-- invalid syntax
  ...test // equivalent using the "spread" syntax
};

console.log(destruct)
 

Кроме того, если вы хотите выбрать подмножество ключей из исходного объекта и распространить их в целевой объект, то это может быть достигнуто следующим:

const test = {
  a: 'hey',
  b: 'hello',
  c: 'goodbye'
}

/* Spread subset of keys from source object to target object */
const welcomeOnly = {
  ...({ a, b } = test, { a, b })
}

console.log('exclude goodbye, show welcomes only:', welcomeOnly);

Второй пример работает путем разрушения исходного объекта (то есть test) в объект с подмножеством ключей, которые мы хотим (a и b).

В рамках этого выражения (т. Е. Всего между ( и )) эти ключи доступны как локальные переменные. Мы пользуемся этим и передаем их новому объекту (например, { a, b }). Поскольку новый объект объявляется после ,, он возвращается как результат выражения.

0 голосов
/ 26 июня 2019

Вы можете попытаться работать таким образом для уничтожения массивов!

    let abc = {
      a: 'hello',
      b: 'hey',
      c: 'hi, there!'
    }


    let {a: x, b:y, c:z} = abc;

    console.log(x,y,z)  

// "hello"
   "hey"
   "hi, there!"
0 голосов
/ 26 июня 2019

Если вы пытаетесь получить подмножество свойств, вы можете использовать оператор rest

const test = {
  a: 'hey',
  b: 'hello',
  c: 'goodbye'
};

const { c, ...destruct } = test;

console.log(destruct);

Это присваивает c const, а оставшиеся свойства назначаются для dest const.Сначала перечислите все нежелательные свойства, а затем оставшиеся свойства перехватываются с помощью оператора rest.

Работает также и с массивами.

const test = ['hey', 'hello', 'goodbye'];

const [ first, ...rest ] = test;

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