jQuery美元.扩展导致第一个对象完全被第二个对象替换

jQuery $.extend results in first object completely replaced by second

本文关键字:第二个 对象 替换 一个对象 扩展 美元 jQuery      更新时间:2023-09-26

除了纯代码之外,我找不到一个方法来演示这一点,但下面是正在发生的事情:我使用AJAX获取JSON文件。我将数据保存到一个变量中。一旦完成,我将对另一个JSON文件进行另一个get,目的是合并两个数据集。

$.get('1.json', function (foo) {
    var res1 = foo;
    $.get('2.json', function (bar) {
        var res2 = bar;
        $.extend(res1, res2);
    });    
});

无论我做什么,res1都会输出res2的数据集。我试过使用

var baz = $.extend({}, res1, res2);

默认情况下,.extend只会进行浅拷贝。例如:

var obj1 = { 
    a : {
        banana: true
    }
}
var obj2 = { 
    a : {
        monkey: true
    }
}
var obj3 = $.extend({}, obj1, obj2);
/*
    obj3 = {
        a : {
            monkey: true
        }
    }
*/

为了进行深度复制(并保留您的香蕉),您可以使用.extend的第二个签名并传递true作为第一个参数:

var obj3 = $.extend(true, {}, obj1, obj2);