Javascript 从ES6中内联属性的子集创建对象
假设我有一个objectJavascript 从ES6中内联属性的子集创建对象,javascript,ecmascript-6,Javascript,Ecmascript 6,假设我有一个objectobj: 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});
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)是否有任何实用程序可以执行此操作?您可以使用将旧对象解压到新对象中,只需提供要用新值覆盖的键即可
let obj2 = {
...obj,
d: 4
}
[object Object] {
a: 1,
b: 1,
c: 1,
d: 4
}
正如@azium所指出的,这是一个第二阶段的建议,意味着如果你有Babel6.x,如果是5.x,你需要将它安装到Babel中,默认情况下它将被启用
npm install babel-preset-stage-2
当然,
Object.assign
可以帮你完成。它接受多个对象作为参数:
let other = Object.assign({}, obj, {d: 3})
这里我们创建了一个新的“对象接收器”,并将其作为第一个参数。然后是我们的源对象,最后,我们添加了新的属性。在键重叠的情况下,将使用来自最新参数的值
Henrik答案中的对象扩展操作符做了完全相同的事情,但它还没有标准化
Object.assign
是ES6的一部分,已经在中实现。@azium这是一个第二阶段ES6计划,而不是ES7。@madox2-这与obj.d=3
让obj2=Object.assign({},obj,{d:3})完全相同代码>@azium:只有第4阶段提案才能纳入ES2016/ES7。Spread运算符不行。您所说的“内联”是什么意思?是否要创建新对象?如果你只是想改变一个属性的值,那应该是直接的,没有任何ES6的东西?