Javascript 替换一个对象';s属性与另一个属性的属性?
首先,我不是说从一个对象到另一个对象的深度克隆 我有一个目标:Javascript 替换一个对象';s属性与另一个属性的属性?,javascript,clone,Javascript,Clone,首先,我不是说从一个对象到另一个对象的深度克隆 我有一个目标: var data1 = { p1: values1, p2: values2, ..... }; value1和value2可以是任何数据类型,如对象或数组 我还有一个目标: var data2 = { p3: values3, p4: values4,
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仍然指向旧数据1,其值仍然为:
{
p1: value1
}
但我希望ref是data2试试:
extend(data1、data2) 使用jQuery.extend()
对于深度副本:var object=$.extend({},object1,object2)代码>
更多信息您可以使用此功能:
function replaceProperties(dest, src) {
for (var i in dest)
delete dest[i];
for (var i in src)
dest[i] = src[i];
}
代码是显而易见的,似乎它做了你想要的。它不会像你说的那样“破坏引用”
虽然当属性不可枚举或来自原型时,它可能无法实现您想要的功能
如果您不必支持IE10和之前的版本,使用或,您可以在更改src
属性时更新dest
:
function replaceProperties(dest, src) {
for (var i in dest)
delete dest[i];
Object.setPrototypeOf(dest, src);
}
不中断引用是什么意思?很抱歉,这是非常不同的。因此,您希望将所有data2
的属性复制到data1
,覆盖与data1
同名的任何属性?在
循环中为..做一个简单的不是很容易吗?@AlexanderO'Mara这不是那个问题的重复。@FaridNouriNeshat我明白你的意思了,在更新后,我改进了标题并指定了重新打开的问题。但是这会将data2的属性添加到data1中,不替换此操作将属性从两个对象复制到新对象。1.它将打破参考,2。它不会清除原始属性。