как объединить два одинаковых значения javascript объект в angular? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть такой объект

var obj1 = {
            key1: {
                name: book1,
                count: 5
                },
            key2: {
                name: book2,
                count: 7
                },
             }

var obj2 = {
            key1: {
                name: book1,
                count: 3
                },
            key2: {
                name: book2,
                count: 5
                },
           }

Я пытался

var obj3 = {... obj1, ...obj2}

и получил этот результат

var obj3 = {
            key1: {
                name: book1,
                count: 3
                },
            key2: {
                name: book2,
                count: 5
                },
           }
}

Но я ожидаю, что этот результат

var obj3 = {
            key1: {
                name: book1,
                count: 8
                },
            key2: {
                name: book2,
                count: 12
                },
           }
}

Мне нужно объединить эти два объекта, и значение счетчика будет добавлено к соответствующим ключам объекта. Пожалуйста, помогите мне получить этот результат заранее

1 Ответ

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

Вы выбираете объекты в массиве и уменьшаете их, глядя на общие ключи.

var obj1 = { key1: { name: 'book1', count: 5 }, key2: { name: 'book2', count: 7 } },
    obj2 = { key1: { name: 'book1', count: 3 }, key2: { name: 'book2', count: 5 } },
    result = [obj1, obj2].reduce((r, o) => {
        Object.entries(o).forEach(([k, v]) => {
            if (r[k]) r[k].count += v.count;
            else r[k] = { ...v };
        });
        return r;
    }, {});

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