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

1

Допустим, это ответ от моего 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: "",
        }
    }
]

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

  • 0
    Ищите документацию по рекурсии, зацикливанию и т. Д.
  • 0
    Вы можете объединить предопределенный пустой объект с ответом, и при этом он заменит только тот, который существует в ответе.
Показать ещё 6 комментариев
Теги:
object
arrays

1 ответ

0
Лучший ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню