我正在尝试使用jQuery $.extend合并两个对象。
使用下面的代码,我试图提醒(“Ball- Stump -Umpire”)。但是当前的输出是(“Undefined- Stump -Umpire”)。它不能实现深度(递归)复制。我们如何纠正这一点呢?
$(document).ready(function () {
debugger;
//$.extend
var obj3 = { throwable: { text1: 'Ball' }, text3: 'Umpire' };
var obj4 = { throwable: { text4: 'Bat' }, text2: 'Stump' }
//Simple Copy
var result1 = $.extend(obj3, obj4);
//alert(result1.throwable.text4 + " - " + result1.text2 + " - " + result1.text3);
//Deep Copy
//First parameter is passed as Boolean true to accomplish deep (recursive) copy
var result2 = $.extend(true, obj3, obj4);
alert(result2.throwable.text1 + " - " + result2.text2 + " - " + result2.text3);
});编辑:我推荐了
发布于 2012-02-14 18:21:10
在独立运行时,您的第二个代码片段可以按预期工作,并将obj4的深层副本复制到obj3中。
问题是,前面的代码片段已经将obj4浅复制到obj3中,并在此过程中使用obj4完全覆盖了它的throwable成员。因此,在该代码运行后,throwable.text1在obj3中不再存在。
obj3是:{:{ text1:'Ball‘},text3:’裁判‘}
obj3变成:{
obj3仍然是:{可投:{ text4:'Bat‘},text3:’裁判‘,text2:'Slump’}
发布于 2012-02-14 16:58:53
在您的代码中,extend将覆盖text1属性。如果你想要一个连接字符串的方法,编写你自己的代码,extend不会这样做。
类似于:
function(o1, o2) {
var ores = {};
for(var p in o1) ores.p = o1.p;
for(var p in o2) ores.p = ores.p ? ores.p+o2.p : o2.p;
return ores;
}发布于 2012-02-14 17:00:39
问题是,对象中有两个同名的属性: text1。即使使用深度扩展,jquery extend也不会将其合并到新的concat字符串或数组中。
如果您的属性之一是另一个对象,则深度复制是相关的。使用deep extend,子对象的所有属性都会被合并,而不仅仅是子对象本身。
我认为你必须使用你自己的扩展函数。
https://stackoverflow.com/questions/9273966
复制相似问题