Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从ES6中内联属性的子集创建对象_Javascript_Ecmascript 6 - Fatal编程技术网

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

Javascript 从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});

假设我有一个object
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的东西?