'how do i delete child element in nested Json Array and rename Id of child element and merge it to parent element? [closed]

I've JSON array which is returned after an edit success in react-redux-saga. The record I updated before and after successfull update comes together as an element of JSON array. So, I need to replace the old resort element with the newly updated resort values and also delete the old resort.

Here, in this example, I have updated resortId(id)=15, but my redux-saga returns both-old resort and the updated new resort,clubbed together in a single element in JSON array cuz in the this.props(cuz place part in this id=15 belongs to another saga store).

    resortafterupdate=[{
                "id": 5,
                "name": "The Ananta Udaipur",
                "address": "Village Bujhda,Tehsil Girwa",
                "placeId": 2,
                "city": "Udaipur",
                "state": "Rajasthan",
                "country": "India",
                "details": "string",
                "phone": "567890055"
            }, {
                "id": 10,
                "name": "Test",
                "address": "Raj Garden road111",
                "placeId": 4,
                "city": "Shillong",
                "state": "Meghalaya",
                "country": "India",
                "details": "afafas asdfasfas",
                "phone": "986289"
            }, {
                "id": 11,
                "name": "bbbbb",
                "address": "ggjgjgjh",
                "placeId": 1,
                "city": "Panjim",
                "state": "Goa",
                "country": "India",
                "details": "jjkhkhkhk",
                "phone": "89789789"
            }, {
                "id": 12,
                "name": "The Classic",
                "address": "chandni chowk",
                "placeId": 4,
                "city": "Shillong",
                "state": "Meghalaya",
                "country": "India",
                "details": "beverages",
                "phone": "687686868"
            }, {
                "id": 9,
                "name": "xyzzzz 56788998877666",
                "address": "111111223345566Raj Garden road111",
                "placeId": 2,
                "city": "Udaipur",
                "state": "Rajasthan",
                "country": "India",
                "details": "afafas asdfasfas",
                "phone": "11111111111"
            }, {
                "id": 13,
                "name": "Byculla Navi ln",
                "address": "Byculla Navi ln",
                "placeId": 3,
                "city": "Puducherry",
                "state": "Puducherry",
                "country": "India",
                "details": "beverages",
                "phone": "04409"
            }, {
                "id": 8,
                "name": "test address",
                "address": "Raj Garden road111",
                "placeId": 1,
                "city": "Panjim",
                "state": "Goa",
                "country": "India",
                "details": "afafas asdfasfas",
                "phone": "3253453434"
            }, {
                "id": 7,
                "name": "test name",
                "address": "test address",
                "placeId": 4,
                "city": "Shillong",
                "state": "Meghalaya",
                "country": "India",
                "details": "afafas asdfasfas",
                "phone": "9862897999"
            },
             {
                "resort": {
                    "id": 15,
                    "name": "AAA",
                    "address": "hjhgkjk",
                    "placeId": 4,
                    "city": "Shillong",
                    "state": "Meghalaya",
                    "country": "India",
                    "details": "jhkhkjhkjhkjh",
                    "phone": "98789797"
                },
                "id": 15,
                "name": "BBB",
                "address": "NewTown",
                "details": "jhkhkjhkjhkjh",
                "phone": "98789797",
                "place": {
                    "id": 3,
                    "city": "Puducherry",
                    "country": "India",
                    "state": "Puducherry"
                }
            }
        ]

How do I delete the child element resort with id=15 as this is old record before the update? And how do I rename the id of "place" to "placeId" and merge the inner parts - placeId,city,state and country to the outer part of the element - name=BBB and Id=15 and address": "NewTown","details": "jhkhkjhkjhkjh","phone": "98789797" to something like this

    resortafterupdate=[{
                "id": 5,
                "name": "The Ananta Udaipur",
                "address": "Village Bujhda,Tehsil Girwa",
                "placeId": 2,
                "city": "Udaipur",
                "state": "Rajasthan",
                "country": "India",
                "details": "string",
                "phone": "567890055"
            }, {
                "id": 10,
                "name": "Test",
                "address": "Raj Garden road111",
                "placeId": 4,
                "city": "Shillong",
                "state": "Meghalaya",
                "country": "India",
                "details": "afafas asdfasfas",
                "phone": "986289"
            }, {
                "id": 11,
                "name": "bbbbb",
                "address": "ggjgjgjh",
                "placeId": 1,
                "city": "Panjim",
                "state": "Goa",
                "country": "India",
                "details": "jjkhkhkhk",
                "phone": "89789789"
            }, {
                "id": 12,
                "name": "The Classic",
                "address": "chandni chowk",
                "placeId": 4,
                "city": "Shillong",
                "state": "Meghalaya",
                "country": "India",
                "details": "beverages",
                "phone": "687686868"
            }, {
                "id": 9,
                "name": "xyzzzz 56788998877666",
                "address": "111111223345566Raj Garden road111",
                "placeId": 2,
                "city": "Udaipur",
                "state": "Rajasthan",
                "country": "India",
                "details": "afafas asdfasfas",
                "phone": "11111111111"
            }, {
                "id": 13,
                "name": "Byculla Navi ln",
                "address": "Byculla Navi ln",
                "placeId": 3,
                "city": "Puducherry",
                "state": "Puducherry",
                "country": "India",
                "details": "beverages",
                "phone": "04409"
            }, {
                "id": 8,
                "name": "test address",
                "address": "Raj Garden road111",
                "placeId": 1,
                "city": "Panjim",
                "state": "Goa",
                "country": "India",
                "details": "afafas asdfasfas",
                "phone": "3253453434"
            }, {
                "id": 7,
                "name": "test name",
                "address": "test address",
                "placeId": 4,
                "city": "Shillong",
                "state": "Meghalaya",
                "country": "India",
                "details": "afafas asdfasfas",
                "phone": "9862897999"
            },
             {
                "id": 15,
                "name": "AAA",
                "address": "hjhgkjk",
                "details": "jhkhkjhkjhkjh",
                "phone": "98789797",
                    "placeId": 3,
                    "city": "Puducherry",
                    "country": "India",
                    "state": "Puducherry"
                
            }
        ]

I have deleted the "resort" but unable to rename id in place part to placeId and merge it to the outer element.

function deleteKey(obj, keyToDelete) {
          Object.keys(obj).forEach(key => {
            if (key.toLowerCase() === keyToDelete) {
              delete obj[key];
            }
            value = obj[key];
            if (value instanceof Object) {
              deleteKey(value, keyToDelete);
            }
          });
        }
        deleteKey(resortafterupdate, "resort");


Solution 1:[1]

I found a solution to flatten the child props using this answe on this link

Solution

Here's the code I modified according to my needs

        function deleteKey(obj, keyToDelete) {
        Object.keys(obj).forEach(key => {
        if (key.toLowerCase() === keyToDelete) {
            delete obj[key];
        }
        value = obj[key];
        if (value instanceof Object) {
            deleteKey(value, keyToDelete);
        }
        });
    }

        Object.flatten = function(data){
        var resultMain = [];
        var result = {};
        function recurse(cur, prop){
            
            if (Object(cur) !== cur){
                result[prop] = cur;
            }else if(Array.isArray(cur)){
                for(var i=0, l=cur.length; i<l; i++)
                    recurse(cur[i], prop);
                if(l == 0)
                    result[prop] = [];
            }else{
                var isEmpty = true;
                for(var p in cur){
                    isEmpty = false;
                    recurse(cur[p], prop==="place" && p==="id"? prop+"Id" : p);
                }
                if(isEmpty && prop)
                    result[prop] = {};
            }
        }
        for(var i=0; i<data.length; i++){
            result = {};
            recurse(data[i], "");
            resultMain[i] = result;
        }
        return resultMain;
    }


    deleteKey(updateResorts, "resort");
    console.log(Object.flatten(newlyaddedResort));

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1