Вы можете объединить с функцией ниже, просто убедитесь, что имена ключей передаются в том же порядке, что и объекты. Вы можете объединить любое количество объектов с помощью метода ниже.
let continent = {
"BD": "AS",
"BE": "EU",
"BF": "AF",
"BG": "EU"
};
let capital = {
"BD": "Dhaka",
"BE": "Brussels",
"BF": "Ouagadougou",
"BG": "Sofia"
};
function merge() {
const args = Array.from(arguments);
const keys = args.filter(e => 'string' === typeof e);
const objs = args.filter(e => 'object' === typeof e);
return objs.reduce((a, b, i) => {
Object.entries(b).forEach(([key, value]) => {
if (! a[key]) {
a[key] = {[keys[i]]: value}
} else {
a[key][keys[i]] = value;
}
});
return a;
}, {})
}
console.log(merge('continent', 'capital', continent, capital));
Может быть проще использовать без фильтрации arguments
function merge(keys, objects) {
return objects.reduce((a, b, i) => {
Object.entries(b).forEach(([key, value]) => {
if (! a[key]) {
a[key] = {[keys[i]]: value}
} else {
a[key][keys[i]] = value;
}
});
return a;
}, {})
}
console.log(merge(['continent', 'capital'], [continent, capital]));
Чтобы исключить необходимость записи каждого ключа, вы также можете передать аргументы в виде массива объектов, как показано ниже. Для этого необходимо, чтобы переменные были названы в качестве желаемых ключей.
function merge(data) {
return data.reduce((a, b, i) => {
const key = Object.keys(b)[0];
Object.entries(b[key]).forEach(([k, v]) => {
if (!a[k]) {
a[k] = {[key]: v}
} else {
a[k][key] = v;
}
});
return a;
}, {})
}
console.log(merge([{continent}, {capital}]));