从 ES6 中内联的属性子集创建对象
Creating object from subset of properties inline in ES6
假设我有一个对象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 的一部分,并且已经在最新的浏览器中实现。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从 ES6 中内联的属性子集创建对象
- 对象数组-选择数组子集,其中对象属性为值数组
- 检查一个数组是否是另一个数组的子集(但检查一个属性)
- 返回对象及其属性的子集
- 是否有更好/更短的模式来将一个对象的属性子集设置到另一个对象上?
- 如何将骨干模型属性的一个子集保存到服务器,而不触发PATCH而不是POST ?
- 带有属性子集的对象数组克隆