głębokie scalanie obiektów z AngularJS

Zwykle do płytkich obiektów, których używałbymangular.extend()

Oto przykład tego:

var object1 = {
  "key": "abc123def456",
  "message": {
    "subject": "Has a Question",
    "from": "[email protected]",
    "to": "[email protected]"
   }
};

var object2 = {
  "key": "00700916391"
};

console.log(angular.extend({}, object1, object2));

Dałby nam:

{
 "key": "00700916391",
 "message": {
   "subject": "Has a Question",
   "from": "[email protected]",
   "to": "[email protected]"
  }
}

Ale co, jeśli chciałbym scalić obiekty, aby klucze nadrzędne nie były nadpisywane przez obiekty podrzędne:

var object1 = {
  "key": "abc123def456",
  "message": {
    "subject": "Has a Question",
    "from": "[email protected]",
    "to": "[email protected]"
   }
};

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

Dałby nam:

{
 "key": "00700916391",
 "message": {
   "subject": "Hey what's up?",
   "from": "[email protected]",
   "to": "[email protected]",
   "something": "something new"
  }
}

Czy istnieje funkcja kątowa, która już łączy się głęboko, czego nie jestem świadomy?

Jeśli nie, czy istnieje natywny sposób, aby to zrobić w rekursywnie javascript dla głębokości n?

questionAnswers(5)

yourAnswerToTheQuestion