Как удалить дочерний элемент во вложенном массиве Json, переименовать идентификатор дочернего элемента и объединить его с родительским элементом?

У меня есть массив JSON, который возвращается после успешного редактирования в react-redux-saga. Запись, которую я обновил до и после успешного обновления, объединяется как элемент массива JSON. Итак, мне нужно заменить старый элемент курорта недавно обновленными значениями курорта, а также удалить старый курорт.

Здесь, в этом примере, я обновил курортId (id) = 15, но моя редукс-сага возвращает как старый курорт, так и обновленный новый курорт, объединенные в один элемент в массиве JSON, потому что в this.props (потому что место часть этого id=15 принадлежит другому магазину саги).

    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"
                }
            }
        ]

Как удалить курорт дочерних элементов с id = 15, так как это старая запись до обновления? И как мне переименовать идентификатор «места» в «placeId» и объединить внутренние части — placeId, город, штат и страну с внешней частью элемента — имя = BBB и Id = 15 и адрес: «Новый город» ,"details": "jhkhkjhkjhkjh","phone": "98789797" примерно так

    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"
                
            }
        ]

Я удалил «курорт», но не смог переименовать часть идентификатора места в placeId и объединить его с внешним элементом.

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

Можете ли вы показать код, который вы пробовали до сих пор, и в чем проблема?

Serge 20.03.2022 00:24

@Serge Я обновил, я плохо разбираюсь в javascript и массиве json, я все еще склоняюсь.

Vodka 20.03.2022 00:38

Отвечает ли это на ваш вопрос? Выравнивание родительского дочернего массива JSON с помощью Javascript

Mark Rotteveel 20.03.2022 14:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение сгладить дочерние реквизиты, используя этот ответ по этой ссылке

Решение

Вот код, который я изменил в соответствии со своими потребностями

        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.info(Object.flatten(newlyaddedResort));

@Chris Я обновил код, который использую для выравнивания массива JSON.

Vodka 20.03.2022 21:53

Другие вопросы по теме