我已经尝试并且惊讶我怎么能用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中生成输出?
提前致谢。
答案 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.apply
和Ext.applyIf
但它们都只能在哈希映射的第一级工作,并且会覆盖而不是合并任何嵌入的数组或哈希值。
事实上,文档明确声明Ext.apply是用于处理配置对象,而不是它很重要,但它只是为了说明它并不意味着它可以用作合并实用程序功能,尽管它基本上可以如果你只想要合并第一级/深度。
答案 2 :(得分:3)
使用Ext.Object.merge()方法,该方法完全符合您的要求。