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

Creating object from subset of properties inline in ES6

本文关键字:属性 子集 创建对象 ES6      更新时间:2023-09-26

假设我有一个对象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)是否有任何实用程序来执行此操作?

您可以使用 Object Spread 运算符将旧对象解压缩为新对象,只需提供要用新值覆盖的键即可。

let obj2 = {
  ...obj,
  d: 4
}
[object Object] {
    a: 1,
    b: 1,
    c: 1,
    d: 4
}

正如@azium指出的那样,这是一个阶段 2 的建议,这意味着如果你有 Babel 6.x,你需要将其安装到 Babel 中,如果 5.x 默认情况下会启用它。

npm install babel-preset-stage-2

当然,Object.assign可以为您做到这一点。它接受多个对象作为参数:

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

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

Henrik 答案中的对象传播运算符执行完全相同的操作,但尚未标准化。 Object.assign是 ES6 的一部分,并且已经在最新的浏览器中实现。