JS Хотите выполнить итерацию и установить значение каждого ключа во вложенном объекте в «пустое», а также создать массив таких объектов - PullRequest
1 голос
/ 30 апреля 2020

Базовый объект:

obj = {
    "place": "{{base_gplaceId}}",
    "feedInputs": [
        {
            "subCategoryQuestion": "{{base_gquestionId}}",
            "context": "other",
            "image": "abc.jpg",
            "mediaMetadata": {
                "stickerList": [
                    {
                        "id": "someid2",
                        "sticker": "delish",
                        "weight": 3
                    }
                ],
                "textList": [
                    {
                        "text": "What an evening!!!"
                    }
                ]
            }
        }
    ]
};

больше ключей может иметь больше вложенности,

хочет установить значения ключей = "", один за другим и pu sh обновленный объект в массив

Ожидаемый OP:

[
{"place":"","feedInputs":[{"subCategoryQuestion":"{{base_gquestionId}}","context":"other","image":"abc.jpg","mediaMetadata":{"stickerList":[{"id":"someid2","sticker":"delish","weight":3}],"textList":[{"text":"Whatanevening!!!"}]}}]},

{"place":"{{base_gplaceId}}","feedInputs":[{"subCategoryQuestion":"","context":"other","image":"abc.jpg","mediaMetadata":{"stickerList":[{"id":"someid2","sticker":"delish","weight":3}],"textList":[{"text":"Whatanevening!!!"}]}}]},

{"place":"{{base_gplaceId}}","feedInputs":[{"subCategoryQuestion":"{{base_gquestionId}}","context":"","image":"abc.jpg","mediaMetadata":{"stickerList":[{"id":"someid2","sticker":"delish","weight":3}],"textList":[{"text":"Whatanevening!!!"}]}}]},

{"place":"{{base_gplaceId}}","feedInputs":[{"subCategoryQuestion":"{{base_gquestionId}}","context":"other","image":"","mediaMetadata":{"stickerList":[{"id":"someid2","sticker":"delish","weight":3}],"textList":[{"text":"Whatanevening!!!"}]}}]},

{"place":"{{base_gplaceId}}","feedInputs":[{"subCategoryQuestion":"{{base_gquestionId}}","context":"other","image":"abc.jpg","mediaMetadata":{"stickerList":[{"id":"","sticker":"delish","weight":3}],"textList":[{"text":"Whatanevening!!!"}]}}]}
,...........]

пробовал пару рекурсий, но не смог разорвать после обновления внутри вложенных объектов, любой упрощенный c подход?

1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете перебирать свойства и изменять значения, которые не являются объектами. Для получения доступа ко всему объекту сохраните также root и возьмите копию объекта с помощью stringify и проанализируйте набор результатов.

function visitAll(object, root = object) {
    return Object
        .keys(object)
        .flatMap(k => {
            if (object[k] && typeof object[k] === 'object') return visitAll(object[k], root);
            const value = object[k];
            object[k] = '';
            const result = JSON.parse(JSON.stringify(root));
            object[k] = value;
            return result;
        });
}

var object = { place: "{{base_gplaceId}}", feedInputs: [{ subCategoryQuestion: "{{base_gquestionId}}", context: "other", image: "abc.jpg", mediaMetadata: { stickerList: [{ id: "someid2", sticker: "delish", weight: 3 }], textList: [{ text: "What an evening!!!" }] } }] },
    result = visitAll(object);

result.forEach(o => console.log(JSON.stringify(o)));
.as-console-wrapper { max-height: 100% !important; top: 0; }
...