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

时间:2016-06-20 21:55:00

标签: javascript

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

如何在不改变?

的情况下将x设置为“Bye”

5 个答案:

答案 0 :(得分:13)

您可以使用Object.assign



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




Object.assign的替代方案是object spread operator

点差运算符允许您分配"一个对象到另一个对象的所有属性。

我们可以在对象文字中使用它来将a的所有属性分配到b



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




答案 1 :(得分:8)

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

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

Docs for Object.assign()

答案 2 :(得分:1)

有一种简便的方法可以更改对象属性而又不会使原始对象发生变化。

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

答案 3 :(得分:0)

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

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

这里我们创建一个空对象,推送所有a个键值对,然后是我们想要重写的新键值对。因为空对象是第一个参数,我们会改变该对象,而不是a

答案 4 :(得分:0)

尝试以下操作:jq -cn --stream ' fromstream(1|truncate_stream(inputs | select(.[0][0] == "userActivities") | del(.[0][0]))) | select(.localDate[0:7] == "2018-10") ' 2018-10-01T21_45_56Z_triplem-baas_data.json > October_2018_triplem_events.json 这将创建一个新对象,而不会引用旧对象const b = a.map(item => Object.assign({}, ...item));

如果要对数组执行此操作,请尝试使用a

[]