【问题标题】:ES6: change a value while destructuringES6:在解构时改变一个值
【发布时间】:2019-01-24 11:12:58
【问题描述】:

假设我有一个对象

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

我希望将该对象传递给方法

myFunc( obj );

在该方法中,我希望拉出高度,但同时减去一个值。我只希望这样做一次,之后就永远不会改变。

执行以下操作将使我得到我想要的正确高度,即 150。

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

如何在一行中完成上述操作? 像这样的东西 - 但我知道这不起作用。

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

【问题讨论】:

标签: ecmascript-6 destructuring


【解决方案1】:

这是可能的,尽管它是一种损害可读性的 hack,可能会产生错误(如果对象将来包含虚假属性),并且不应该在真实产品中使用。

你可以解构一个不存在的属性,并使用默认值做减法。

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

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

console.log(localHeight)

【讨论】:

  • 此时不要进行解构,而是编写单行代码const {height} = obj, localHeight = height - 50;。相同的数字或字符,但按预期工作。
  • 谢谢,我从上面了解到它是一个 hack,我的用例并不像问题那么简单 - 但答案是一个很好的答案,并且清楚地警告我不要使用它 :)
【解决方案2】:

不,这是不可能的。解构就是这样做的,它将属性分配给目标表达式。赋值语法没有任何用于改变赋值的修饰符(默认初始化器已经是一个延伸)。

不要使用解构,你可以在一个语句中完成它:

const localHeight = obj.height - 50;

比你可以通过解构实现的任何东西都更短,更简单。

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 2017-04-19
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多