0

I have an json object It can be nested and I have an second object containing key/value pair. 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: '[email protected]',
  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.

I want something like this

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

Thank you

0

2 Answers 2

2

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: '[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);

Sign up to request clarification or add additional context in comments.

3 Comments

you do not see the result above?
Yes i see let me edit question I have struggling with my api when i run your above code error with TypeError: Cannot set property 'DealerRef' of undefined
without knowing the original object, i could only guessing.
2

You can iterate through firstObj and replace key/value with 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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.