Buscar por clave y reemplazar por valor en el objeto json nested

Tengo un objeto json Se puede anidar y tengo un segundo objeto que contiene un par clave / valor. Quiero reemplazar el valor del segundo objeto por el primero haciendo coincidir la clave de ambos objetos.

let firstObj = { "enquiry": { "Lead": { "SubLead": { "DealerRef": "test", "DealerFloor": "test", "Region": "test", "Source": { "Special": "test", "TestDrive": "test", "TradeIn": "test", "Finance": "test" } }, "Contact": { "Info": { "FirstName": "test", "Surname": "test", "Email": "test", "OfficePhone": "test", "CellPhone": "test" } }, "Seeks": { "Stock": { "Used": "test", "Brand": "test", "Model": "test", "StockNr": "test" } } } } } 

Es mi matriz

 let secondObj = { DealerRef: '18M', DealerFloor: 'UCP', Region: 'Western Cape', FirstName: 'abc', Surname: 'xyz', Email: '[email protected]', OfficePhone: '2343243', CellPhone: '2343243', Used: '1', Brand: 'QAE', Model: 'test', StockNr: 'SEDONA', Special: '2013 Kia Sedona', TestDrive: '0', TradeIn: '0', Finance: '0' }; 

He intentado de muchas maneras [ http://jsfiddle.net/FM3qu/7/◆◆1] de esta manera puedo obtener una solución en Jsfiddle, en mi aplicación expresa cuando bash procesarla me da un objeto vacío.

Quiero algo como esto

 "enquiry": { "Lead": { "SubLead": { "DealerRef": "18M", "DealerFloor": "UCP", "Region": "Western Cape".... 

Gracias

Primero puedes guardar todas las referencias y luego asignar los datos que tengas.

 function update(object, data) { function getAllKeys(o) { Object.keys(o).forEach(function (k) { if (typeof o[k] === 'object') { return getAllKeys(o[k]); } keys[k] = o; }); } var keys = Object.create(null); getAllKeys(object); Object.keys(data).forEach(function (k) { if (keys[k] && k in keys[k]) { // check if key for update exist keys[k][k] = data[k]; } }); } var object = { "enquiry": { "Lead": { "SubLead": { "DealerRef": "test", "DealerFloor": "test", "Region": "test", "Source": { "Special": "test", "TestDrive": "test", "TradeIn": "test", "Finance": "test" } }, "Contact": { "Info": { "FirstName": "test", "Surname": "test", "Email": "test", "OfficePhone": "test", "CellPhone": "test" } }, "Seeks": { "Stock": { "Used": "test", "Brand": "test", "Model": "test", "StockNr": "test" } } } } }, data = { DrNo: 666, DealerRef: '18M', DealerFloor: 'UCP', Region: 'Western Cape', FirstName: 'abc', Surname: 'xyz', Email: '[email protected]', OfficePhone: '2343243', CellPhone: '2343243', Used: '1', Brand: 'QAE', Model: 'test', StockNr: 'SEDONA', Special: '2013 Kia Sedona', TestDrive: '0', TradeIn: '0', Finance: '0' }; update(object, data); console.log(object); 

Puede iterar a través de firstObj y reemplazar clave / valor con secondObj

 function iterateObj(obj){ for(var key in obj){ if(obj.hasOwnProperty(key)){ if(typeof obj[key] === 'object'){ iterateObj(obj[key]); } else if(secondObj[key]!=undefined){ obj[key] = secondObj[key] } } } } iterateObj(firstObj) console.log(firstObj); // this will give proper results