gpt4 book ai didi

javascript - 将一个对象的属性替换为另一个对象的属性?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:00:14 28 4
gpt4 key购买 nike

首先,我并不是说将一个对象深度克隆到另一个对象。

我有一个对象:

var data1 = {
p1: values1,
p2: values2,
.....
};

value1 和 value2 可以是任何数据类型,例如对象或数组。

我还有一个对象:

var data2 = {
p3: values3,
p4: values4,
.....
};

value3 和 value4 可以是任何数据类型,例如对象或数组。

现在我想将 data2 的所有属性克隆到 data1。

我想要这个的原因是引用了 data1,在更改 data1 的属性后我不想破坏引用。

如果我做类似的事情

 data1 = clone(data2)

我会打破引用。

更新: 打破引用意味着什么:

var data1 = {
p1: value1
};
var data2 = {
p2: vale2
};
var ref = data1;

如果我这样做:

data1 = clone(data2);  

现在 ref 仍然指向旧的 data1,它的值仍然是:

{
p1: value1
}

但我希望 ref 是 data2

最佳答案

你可以使用这个函数:

function replaceProperties(dest, src)  {
for (var i in dest)
delete dest[i];
for (var i in src)
dest[i] = src[i];
}

代码很明显,看起来就像您想要的一样。它不会像您所说的那样“破坏引用”。

虽然当属性不可枚举或来自原型(prototype)时它可能不会做你想做的......

如果您不必支持 IE10 及之前版本,请使用 __proto__setPrototypeof ,您可以在 src 属性更改时更新您的 dest:

function replaceProperties(dest, src)  {
for (var i in dest)
delete dest[i];
Object.setPrototypeOf(dest, src);
}

关于javascript - 将一个对象的属性替换为另一个对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28133916/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com