Как динамически добавлять объекты на основе предварительно определенной структуры, если объект не существует или имеет значение null? - PullRequest
0 голосов
/ 25 октября 2018

Допустим, это ответ от моего API

user = {
    profile: {
        name: "John",
        age: 32,
        links: [
            {
                github: {
                    name: "John",
                    url: "https://github.com/john"
                },
                facebook: {
                    name: "John",
                    url: "https://facebook.com/john"
                }
            }
        ]
    },
    posts: [
        {
            id: 1,
            title: "First post"
        },
        {
            id: 2,
            title: "Second post"
        }
    ]
}

и моя предопределенная структура объекта:

predefinedUserObj = {
    profile: {
        name: "",
        age: "",
        links: [
            {
                github: {
                    name: "",
                    url: "",
                },
                facebook: {
                    name: "",
                    url: "",
                }
            }
        ]
    },
    posts: []
}

Я получаю user object из моего Api, и я хочусравнить ответ API с предопределенной структурой.

Пример 1:

Если значение user.profile.links[0].github равно null в ответе API, я хочу присвоить этому свойству любое значение в предопределенной структуре.(в данном случае это { name: "", url:" })

Пример 2:

если значение user.profile.links равно null, тогда я хочу назначить предопределенное значение / объект из предопределенной структуры(в данном случае это `

[
    {
        github: {
            name: "",
            url: "",
        },
        facebook: {
            name: "",
            url: "",
        }
    }
]

. Поэтому, когда структура не совпадает, я хочу заменить ее предварительно заполненными значениями из предварительно определенной структуры. Как я могу это сделать? Заранее спасибо.

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете использовать рекурсивную функцию, чтобы проверить, существует ли предопределенный ключ в объекте.Если ключ объекта не определен, пустой или нулевой, присвойте объекту предопределенное значение ключа:

function object_filter_recursive(obj, predefined) {

    if ( typeof(predefined) == "object") {
	Object.keys(predefined).forEach(function (k){
            if (typeof obj[k] !== 'undefined' && obj[k] != '') {
                if ( typeof(predefined[k]) == "object") {
                    return object_filter_recursive(obj[k], predefined[k]);
                } else {
                    predefined[k] = obj[k];
                }
             }
        })
    }

    return predefined;
}

var predefined = {
    profile: {
        name: "default name",
        age: "", // if no default value, just leave it empty //
        links: [
            {
                github: {
                    name: "default github",
                    url: "default github link",
                },
                facebook: {
                    name: "default facebook name",
                    url: "default facebook link",
                }
            }
        ]
    },
    posts: ""
}

var obj = {
    profile: {
        name: "john",
        age: "40",
        links: [
            {
                github: {
                    name: "",
                    url: "",
                },
                facebook: {
                    name: "",
                    url: "",
                }
            }
        ]
    },
    posts: [
    	{something1: "value1"},
        {something2: "value2"}
    ]
}


obj = object_filter_recursive(obj, predefined);
console.log(obj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...