首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用$.extend的jQuery深度/递归复制

使用$.extend的jQuery深度/递归复制
EN

Stack Overflow用户
提问于 2012-02-14 16:49:28
回答 3查看 7.1K关注 0票数 12

我正在尝试使用jQuery $.extend合并两个对象。

使用下面的代码,我试图提醒(“Ball- Stump -Umpire”)。但是当前的输出是(“Undefined- Stump -Umpire”)。它不能实现深度(递归)复制。我们如何纠正这一点呢?

代码语言:javascript
复制
 $(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);


    });

编辑:我推荐了

(Deep) copying an array using jQuery

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-14 18:21:10

在独立运行时,您的第二个代码片段可以按预期工作,并将obj4的深层副本复制到obj3中。

问题是,前面的代码片段已经将obj4浅复制到obj3中,并在此过程中使用obj4完全覆盖了它的throwable成员。因此,在该代码运行后,throwable.text1obj3中不再存在。

  • 最初,obj3是:

{:{ text1:'Ball‘},text3:’裁判‘}

  • 在第一个代码片段运行后,obj3变成:

{

  • :{ text4:'Bat‘},text3:’裁判员‘,text2:'Slump’}最后,在第二个代码片段运行后,obj3仍然是:

{可投:{ text4:'Bat‘},text3:’裁判‘,text2:'Slump’}

票数 8
EN

Stack Overflow用户

发布于 2012-02-14 16:58:53

在您的代码中,extend将覆盖text1属性。如果你想要一个连接字符串的方法,编写你自己的代码,extend不会这样做。

类似于:

代码语言:javascript
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2012-02-14 17:00:39

问题是,对象中有两个同名的属性: text1。即使使用深度扩展,jquery extend也不会将其合并到新的concat字符串或数组中。

如果您的属性之一是另一个对象,则深度复制是相关的。使用deep extend,子对象的所有属性都会被合并,而不仅仅是子对象本身。

我认为你必须使用你自己的扩展函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9273966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档