jQuery $ .extend导致第一个对象完全被第二个替换

时间:2015-07-14 20:13:54

标签: javascript jquery json

我找不到一种方法来演示除了纯代码之外的其他方法(没有小提琴)但是这里正在发生的事情:我让一个AJAX转到一个JSON文件。我将数据保存到变量。完成后,我再创建另一个JSON文件,目的是组合两个数据集。

$.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);

没有运气。

1 个答案:

答案 0 :(得分:2)

默认情况下,.extend只会执行浅层复制。例如:

columns = [
    'MemTotal', 'MemFree', 'Cached', 'SwapTotal', 'SwapFree', 'AnonPages',
    'Dirty', 'Writeback', 'WritebackTmp', 'PageTables', 'HugePages_Free',
    'HugePages_Rsvd', 'HugePages_Surp', 'HugePages_Total'
]
stats = {}
with open('/proc/meminfo') as infile:
    for line in infile:
        line = line.split()
        stats[line[0][:-1]] = line[1]

values = [stats[key] for key in columns]
print '\t'.join(values)

为了进行深层复制(并保留您的香蕉),您可以使用var obj1 = { a : { banana: true } } var obj2 = { a : { monkey: true } } var obj3 = $.extend({}, obj1, obj2); /* obj3 = { a : { monkey: true } } */ 的第二个签名并传递.extend作为第一个参数:

true