通常我会使用angular.extend()
来浅复制对象。
以下是一个例子:
var object1 = {
"key": "abc123def456",
"message": {
"subject": "Has a Question",
"from": "example1@example.com",
"to": "example2@example.com"
}
};
var object2 = {
"key": "00700916391"
};
console.log(angular.extend({}, object1, object2));
会给我们:
{
"key": "00700916391",
"message": {
"subject": "Has a Question",
"from": "example1@example.com",
"to": "example2@example.com"
}
}
但如果我想合并对象,使得父键不被子对象覆盖,该怎么办:
var object1 = {
"key": "abc123def456",
"message": {
"subject": "Has a Question",
"from": "example1@example.com",
"to": "example2@example.com"
}
};
var object2 = {
"key": "00700916391", //Overwrite me
"message": { //Dont overwrite me!
"subject": "Hey what's up?", //Overwrite me
"something": "something new" //Add me
}
};
console.log(merge(object1, object2));
会给我们:
{
"key": "00700916391",
"message": {
"subject": "Hey what's up?",
"from": "example1@example.com",
"to": "example2@example.com",
"something": "something new"
}
}
我是否不知道的有一个Angular函数可以进行深度合并?
如果没有,那么是否有一种递归地处理深层级javascript对象的本地方法来完成此操作?
n
个对象作为参数传递。就像angular.extend()
的工作原理一样...准备好迎接挑战了吗? :) - Dan Kanzefor... in
循环中,不要遍历obj2
,而是通过另一个循环遍历arguments
(不要从0开始索引,你需要跳过第一个对象 :) (它不是答案的一部分的原因与没有深度限制或数组处理的原因相同-它会使简单的答案变得复杂)如果你在实现这个过程中遇到问题-欢迎在 JS 房间与我讨论。 - Benjamin Gruenbaumi
声明一个var
-var result = {}, i;
- hoobleitypeof null
是什么? - Benjamin Gruenbaum