Подтвердить что ты не робот

ES6/Next: разрушение объекта с остальными - группировка

У меня есть:

const props = {
  gallery: [],
  select: () => null,
  one: 1,
  two: 2,
}

Я могу разрушить его с помощью

const {gallery, select, ...other} = props

Теперь у меня будут три переменные:

  • галерея= []
  • выберите= () => null
  • other= {one: 1,two: 2}

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

Что-то вроде этого (это не сработает, но я надеюсь, что ясно, что я пытаюсь сделать):

const {{gallery, select}: specific, ...other} = props

Итак, у меня будет две переменные:

  • = {gallery: [], select: () => null}
  • other= {one: 1,two: 2}

Я мог бы решить это на более высоком уровне и построить реквизиты таким образом:

const props = {
  specific: {
    gallery: [],
    select: () => null,
  },
  other: {
    one: 1,
    two: 2,
  }
}

Но мне просто интересно, возможно ли это с деструктурированием.

4b9b3361

Ответ 1

Как насчет этого? others содержит также данные specific, и я должен сначала получить доступ к props (возможно, это может быть улучшено), но я думаю, что он в основном группируется во время деструктурирования. Он работает, потому что вы можете назначить значение по умолчанию, если атрибут не существует:

const props = {
  gallery: [],
  select: () => null,
  one: 1,
  two: 2,
}

const {gallery : gal, select : sel} = props;
const {specific: specific={gallery: gal, select: sel}, ...others} = props;

console.log(specific);
console.log(others);

Ответ 2

Синтаксис растяжки (и читаемости) до предела можно сделать следующим образом:

(пояснение к коду в комментариях)

const props = {
  gallery: [],
  select: () => null,
  one: 1,
  two: 2,
}

/** destructuring assignment **/
const {
  gallery, //extract the gallery prop
  select, //extract the select prop
  specific: specific={gallery, select},
  // create `specific` setting gallery and select props through default value assignment 
  ...others // assign to others the rest of non extracted props properties
} = props;

console.log(specific);
console.log(others);