Объединить объекты объекта - PullRequest
0 голосов
/ 05 мая 2020

Я хотел бы объединить 2 объекта, которые содержат сами объекты. Примерно так:

let selections = {
    123: {
        abc: {name: 'abc'},
        def: {name: 'def'}
    },
    456: {
        ghi: {name: 'ghi'},
        jkl: {name: 'jkl'}
    }
};

let flatSelections = Object.keys(selections).reduce((r, k) => {
    return selections[k];
}, {});

console.log(flatSelections);

/* expected data
flatSelections = {
    abc: {name: 'abc'},
    def: {name: 'def'},
    ghi: {name: 'ghi'},
    jkl: {name: 'jkl'}
};
*/

Но у меня только выделение ['456'] в качестве вывода. https://jsfiddle.net/benlesc/uw65bjo1/13/

Ответы [ 3 ]

1 голос
/ 05 мая 2020

Вам нужно фактически вернуть модифицированный аккумулятор из reduce. Используйте Object.assign или Spread syntax, чтобы объединить accumulator i.e r с элементом, например k

Также используйте Object.values, поскольку вас интересуют только значения.

let selections = {
    123: {
        abc: {name: 'abc'},
        def: {name: 'def'}
    },
    456: {
        ghi: {name: 'ghi'},
        jkl: {name: 'jkl'}
    }
};

let flatSelections = Object.values(selections).reduce((r, k) => {
    return Object.assign(r, k)
}, {});

console.log(flatSelections);
0 голосов
/ 05 мая 2020

Используйте Object.assign()

let selections = {
    123: {
        abc: {name: 'abc'},
        def: {name: 'def'}
    },
    456: {
        ghi: {name: 'ghi'},
        jkl: {name: 'jkl'}
    }
};

let output = Object.assign(selections["123"] , selections["456"])
console.log(output)

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

{"abc": {"name": "abc"}, "def": {"name": "def"}, "ghi": {"name": "ghi"}, "jkl": {"name": "jkl"}}
0 голосов
/ 05 мая 2020

Вы можете применить reduce к Object.values().

let selections = {
    123: {
        abc: {name: 'abc'},
        def: {name: 'def'}
    },
    456: {
        ghi: {name: 'ghi'},
        jkl: {name: 'jkl'}
    }
};

const res = Object.values(selections).reduce((a, c) => {
    return {...a, ...c};
}, {});

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