JSFiddle - React, Tailwind, and code Playground
JavaScript
console.clear()
var a = [
{ city:"Москва", population: 11504 },
{ city:"Санкт-Петербург", population: 4880 },
{ city:"Новосибирск", population: 1350 }
];
var b = [
{ city:"Москва", density: 2562 },
{ city:"Санкт-Петербург", density: 1403 },
{ city:"Екатеринбург", density: 468 }
];
var c = [
{ city:"Москва", color: '#c00' },
{ city:"New York", density: 2562 },
{ city:"Санкт-Петербург", density: 555 }
];
function myMerge() {
return [].reduce.call(arguments, (index, list) => {
list.forEach(data => {
index[data.city] = index[data.city] || {};
for (var key in data) {
if (data.hasOwnProperty(key)) index[data.city][key] = data[key];
}
})
return index;
}, {})
}
console.log( myMerge(a, b) )
console.log('бонус', myMerge(a, b, c) )