[英]Find by key and replace by value in nested json object
I have an json object It can be nested and I have an second object containing key/value pair. 我有一个json对象,它可以嵌套,还有另一个包含键/值对的对象。 I want to replace the second object's value by first one by matching key both object's key.
我想通过将两个对象的键都匹配来将第一个对象的值替换为第一个。
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"
}
}
}
}
}
Its my array 它是我的数组
let secondObj = {
DealerRef: '18M',
DealerFloor: 'UCP',
Region: 'Western Cape',
FirstName: 'abc',
Surname: 'xyz',
Email: 'test@ctm.co.za',
OfficePhone: '2343243',
CellPhone: '2343243',
Used: '1',
Brand: 'QAE',
Model: 'test',
StockNr: 'SEDONA',
Special: '2013 Kia Sedona',
TestDrive: '0',
TradeIn: '0',
Finance: '0'
};
I have tried many ways [ http://jsfiddle.net/FM3qu/7/][1] this way i'm able to get solution in Jsfiddle, In my express application when I try to process it gives me an empty object. 我已经尝试了许多方法[ http://jsfiddle.net/FM3qu/7/][1],这样我就可以在Jsfiddle中获得解决方案。在我的快速应用程序中,当我尝试处理它时,我得到了一个空对象。
I want something like this 我想要这样的东西
"enquiry": {
"Lead": {
"SubLead": {
"DealerRef": "18M",
"DealerFloor": "UCP",
"Region": "Western Cape"....
Thank you 谢谢
You can iterate through firstObj
and replace key/value with secondObj
您可以遍历
firstObj
并将键/值替换为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
You could first save all references and then assign the data, you have. 您可以先保存所有引用,然后分配数据。
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: 'test@ctm.co.za', 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.