【问题标题】:Selectively assign object properties in ES6/7 [duplicate]在 ES6/7 中选择性地分配对象属性 [重复]
【发布时间】:2015-09-07 14:54:13
【问题描述】:

在 ES6/7 中是否有一个简短的语法用于将一个对象的一些选择性属性分配给另一个对象?比如我想做这个

const a = {
  x: b.x,
  y: b.y,
  z: b.z
}

有 2-3 个属性是可以的,但如果有更多属性,它就会变得多余。我怎样才能让它变得简单?

编辑:这个问题与解构对象无关。我知道解构可以完成这项工作,但它并不比我上面给出的示例更短/更方便,所以这里没有提到

【问题讨论】:

  • 我不同意重复标记,因为另一个问题(虽然非常相关)特别要求 destructuring 而这个问题没有。
  • 好的,抱歉我选错了副本。 ES6 Structuring Assignment? 是正确的。任何有金徽章的人请修理它:-)
  • 正如在其他问题的其他答案中发现的那样,const a = ({x, y, z} => ({x, y, z}))(b) 是一个不太好的选择。见stackoverflow.com/questions/25553910/…
  • @torazaburo:这可能是一个更好的副本。介意打开再关闭吗?
  • @Bergi 确定吗?你的第二个提议的副本可能更接近。

标签: javascript properties ecmascript-6 assign ecmascript-2016


【解决方案1】:

我将此作为答案发布,因为它确实有效,但使用它不是一个明智的主意。

const b = {x: 1, y: 2, z: 3};

with (b) {
    const a = {x, y, z};
}

console.log(a);

严格模式实际上禁止使用自 ECMA5 以来的 with 语句,因此如果您这样做,运行并遵守严格模式的客户端肯定会讨厌您的代码。

with 语句还有其他缺点,您可以在此处阅读更多相关信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/with

【讨论】:

  • 谢谢,看来我的案子没有真正的解决办法。顺便说一句,我认为您的最后一个警告(我将其发布为答案,因为它确实有效,使用它并不是一个明智的主意。)应该放在答案的开头并突出显示以警告可能阅读此内容的其他人。
  • 实际上它并没有真正起作用,因为 const 的作用域是 ES6 中的 with 块。
  • 嗯,只需稍作改动即可工作 :)
  • 我在最新版本的 Chrome 中对此进行了测试,并且可以正常工作。由于const 是在ES6 中引入的,因此需要Chrome 在ES6 或更高版本中运行它,因此确认它可以工作。但我同意,这里 const 关键字的范围令人困惑,因为我最初的想法和你一样。 @Bergi
  • @StephanBijzitter:正如您在ES6 compatibility table 中看到的那样,Chrome 还不支持块作用域——它只处理const,就好像它是var
猜你喜欢
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
相关资源
最近更新 更多