在ES6中从内联属性子集创建对象

时间:2016-02-02 19:22:45

标签: javascript ecmascript-6

我们说我有一个对象obj

let a = b = c = d = 1;
let obj = { a, b, c, d };

我想创建新的对象内联,具有相同的属性,但一个属性已更改。到目前为止,我有这个:

let other = Object.assign({a: obj.a, b: obj.b, c: obj.c}, {d: 3});

和此:

let other = Object.assign((({a, b, c}) => ({a, b, c}))(obj), {d: 3});

在ES6中有更好的方法吗?功能库(如lodash)是否有任何实用程序可以执行此操作?

2 个答案:

答案 0 :(得分:2)

您可以使用Object Spread operator将旧对象解压缩到一个新对象中,然后提供您想要用新值覆盖的密钥。

let obj2 = {
  ...obj,
  d: 4
}

[object Object] {
    a: 1,
    b: 1,
    c: 1,
    d: 4
}

正如@azium所指出的那样,这是一个第二阶段提案,意味着如果您有Babel 6.x,则需要将其安装到Babel中,如果5.x它将默认启用。

npm install babel-preset-stage-2

答案 1 :(得分:1)

当然,Object.assign可以为您完成。它接受多个对象作为参数:

 let other = Object.assign({}, obj, {d: 3})

这里我们创建了一个新的“对象接收器”并将其作为第一个参数。然后是我们的源对象,最后,我们添加了新属性。在重叠键的情况下,将使用最新参数的值。

来自Henrik的答案的对象传播操作符完全相同,但尚未标准化。 Object.assign是ES6的一部分,已在the most recent browsers中实施。