javascript многоуровневое манипулирование объектами - PullRequest
1 голос
/ 14 января 2020

Как я могу написать функцию, которая будет принимать инъекции и изменять текущий объект? Я считаю, что это как-то работает GraphQL, если я не ошибаюсь. Мне нужно добиться этого эффекта простым JS.

    //Object to inject into current object
    const injectionObject = {
        pages: {
            about: {
                title: 'Changed About Page'
            }
        }
    }
    //Object that requires modification based on above object
    const currentObject = {
        pages: {
            home: {
                title: 'Home Page',
                description: 'This is the home page'
            },
            about: {
                title: 'About Page',
                description: 'This is the about page'
            }
        }
    }
    //output
    const outputObject = {
        pages: {
            home: {
                title: 'Home Page',
                description: 'This is the home page'
            },
            about: {
                title: 'Changed About Page', //Only this was affected
                description: 'This is the about page'
            }
        }
    }

1 Ответ

2 голосов
/ 14 января 2020

Вы можете взять записи и обновить свойство или посетить вложенные свойства.

const
    update = (target, source) => Object.entries(source).forEach(([k, v]) => {
        if (v && typeof v === 'object') update(target[k] = target[k] || {}, v);
        else target[k] = v;
    }),
    injectionObject = { pages: { about: { title: 'Changed About Page' } } },
    currentObject = { pages: { home: { title: 'Home Page', description: 'This is the home page' }, about: { title: 'About Page', description: 'This is the about page' } } };

update(currentObject, injectionObject);

console.log(currentObject);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...