ES6 изменить значение при разрушении - PullRequest
0 голосов
/ 24 января 2019

Допустим, у меня есть объект

const obj = { width: 100, height: 200 }

Я хочу передать этот объект методу

myFunc( obj );

Внутри этого метода я хочу вытащить высоту, но наВ то же время вычесть значение.Я только хочу сделать это один раз, и после этого он никогда не изменится.

Выполнение следующих действий даст мне правильную высоту, которую я хочу сказать 150.

let {height: localHeight} = obj;
localHeight = localHeight - 50;

Как мне сделатьвыше в одной строке?Примерно так - но я знаю, что это не работает.

const { height: (localHeight = localHeight - 50) } = obj

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Нет, это невозможно.Деструктуризация делает именно это, она присваивает свойства целевым выражениям.Синтаксис присваивания не имеет модификаторов для изменения назначенного значения (инициализаторы по умолчанию уже растянуты).

Просто не используйте деструктуризацию, и вы можете сделать это в одном выражении:

const localHeight = obj.height - 50;

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

0 голосов
/ 24 января 2019

Возможно, хотя это хак, который ухудшает читабельность, может привести к ошибке (если объект будет содержать свойство fake в будущем) и не должен использоваться в реальном продукте.

Вы можете уничтожить несуществующее свойство и использовать значение по умолчанию для вычитания.

const obj = { width: 100, height: 200 }

const { height, localHeight = height - 50 } = obj

console.log(localHeight)
...