使用Ext JS进行jQuery深度复制?

时间:2011-03-16 22:49:45

标签: object extjs extend deep-copy

我已经尝试并且惊讶我怎么能用ExtJS做。让我用代码块来解释。

在jQuery中

console.clear();
var a = {
    b: 5,
    c: 4,
    o: {
        l: 2,
        p: 2
    }
}

var b = {
    k: 4,
    l: 3,
    c: 5,
    o: {
        m: 2,
        l: 1
    }
}

var ex = $.extend(true, a, b);
console.dir(ex)

这是输出

ex = {
    a: {
        q: 2
    },
    b: 5,
    c: 5,
    o: {
        l: 1,
        p: 2,
        m: 2
    }
}

Ext apply,applyIf,copyTo不能像这样工作。如何在ExtJS中生成输出?

提前致谢。

3 个答案:

答案 0 :(得分:10)

对于最近的项目,我们调整了this sample code以生成以下方法:

Ext.deepCopy = function(p, c) {
    c = c || (p.constructor === Array ? [] : {});
    for (var i in p) {
        if (typeof p[i] === 'object' && p[i] !== null) {
            c[i] = p[i].constructor === Array ? [] : {};
            Ext.deepCopy(p[i], c[i]);
        } else {
            c[i] = p[i];
        }
    }
    return c;
};

答案 1 :(得分:5)

Ext中不支持深度复制。有Ext.applyExt.applyIf但它们都只能在哈希映射的第一级工作,并且会覆盖而不是合并任何嵌入的数组或哈希值。

事实上,文档明确声明Ext.apply是用于处理配置对象,而不是它很重要,但它只是为了说明它并不意味着它可以用作合并实用程序功能,尽管它基本上可以如果你只想要合并第一级/深度。

答案 2 :(得分:3)

使用Ext.Object.merge()方法,该方法完全符合您的要求。