繁体   English   中英

如何在不改变对象的情况下更改对象的属性?

[英]How to change a property on an object without mutating it?

const a = {x: "Hi", y: "Test"}
const b = ???
// b = {x: "Bye", y: "Test"}
// a = {x: "Hi", y: "Test"}

如何在不改变 a 的情况下将bx设置为"Bye"

两种方式...

  1. 您可以使用Object.assign

     const a = { x: "Hi", y: "Test" } const b = Object.assign({}, a, { x: "Bye" }); console.log(b);

  2. 或者您可以使用对象扩展运算符

    展开运算符允许您将一个对象的所有属性“分配”给另一个对象。

    我们可以在这里使用一个对象常量内的所有属性分配ab

     const additions = { x: "Bye" } const a = { x: "Hi", y: "Test" } const b = { ...a, ...additions } console.log(b);

有一种简单的方法可以在不改变原始对象的情况下更改对象属性。

 const a = {x: "Hi", y: "Test"}; const b = {...a, y: "hello"};

创建对象的副本并更改副本:

const b = Object.assign({}, a, {x: "Bye"})

Object.assign()文档

Es6 有一个用于复制对象属性的内置函数, Object.assign

const b = Object.assign({}, a, {x: 'Bye'})

在这里我们创建一个空对象,将所有a s 键值对推入,然后是我们要覆盖的新键值对。 因为空对象是第一个参数,所以我们改变了那个对象,而不是a

试试这个: const b = a.map(item => Object.assign({}, ...item)); 这将创建一个不引用旧对象a新对象

如果您想对数组执行此操作,请尝试使用[]

const b = a.map(item => Object.assign([], ...item));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM