【问题标题】:ES6 Object spread with stringES6 对象用字符串传播
【发布时间】:2019-02-15 05:30:00
【问题描述】:

假设我想使用扩展语法为对象分配一个新属性

const source = { payload: "abc" }
const clone = {}
clone.payload = {...source.payload}

console.log(clone);

期望:clone={payload:"abc"}

实际:clone={payload:{'0':'a','1':'b','2':'c'}}

仅供参考:如果来源是这样的source = { payload: { component: "correct" } }。然后传播语法正常工作

问题:我是否滥用了 ES6 扩展语法以及正确的方法是什么

【问题讨论】:

  • const clone = {...source}const clone = {}; clone.payload = source.payload;
  • 你正在传播字符串,它本身就是一个字符数组。
  • @HereticMonkey,字符串是可迭代的,因此可以是扩展参数或休息参数——但它们不是字符数组
  • 记住{ } 创建了一个对象。所以{...source.payload} 创建了一个对象。我假设您不想将对象分配给clone.payload。也许值得注意的是{...source}Object.assign({}, source) 相同。也许这有助于理解发生了什么。
  • @user633183 当然,否则他们不会创建单独的类型。只是对用户名为“JSNoob”的用户进行简要说明:)。

标签: javascript ecmascript-6 babeljs


【解决方案1】:

clone.payload = {...source.payload} 表示你创建一个新对象,并将source.payload 的内容传播到其中,然后将该新对象分配给clone.payload

要达到您的预期结果,您可以这样做:

const source = { payload: "abc" }
const clone = {...source}

这将创建一个新对象,将source 传播到其中,并将其分配给clone

【讨论】:

  • 如果源具有我不想复制到克隆的属性,比如source = {unwanted: {}, payload:"wanted"},我只想复制有效负载属性
  • @JSNoob 然后使用clone = {payload: source.payload}
  • 就像@Bergi 说的那样,您需要明确说明要从这样的对象中选择什么以及要省略什么。在这种情况下,传播可能不是这项工作的工具。
猜你喜欢
  • 2019-02-25
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多