У меня есть массив объектов, и я пытаюсь объединить объекты. Я пытаюсь создать функцию, которая принимает список в качестве аргумента и возвращает новый объект.
function mergeValues(list) {
var obj = {};
list.forEach(item => {
if (!obj[item.state]) {
obj[item.state] = Object.assign({}, Object.keys(obj));
} else {
obj[item.state] = obj[item.state] + item.population;
}
});
return obj;
}
Текущий вход
var list = [
{ state: 'NJ', city: 'Newark', population: 150 },
{ state: 'NJ', city: 'Trenton', population: 200 },
{ state: 'NY', city: 'New York City', population: 500 },
{ state: 'MI', city: 'Detroit', population: 200 },
{ state: 'MI', city: 'Lansing', population: 100 }
];
Требуемый выход
var obj = {
MI: { count: 2, city: ['Detroit', 'Lansing'], population: 300 },
NJ: { count: 2, city: ['Newark', 'Trenton'], population: 350 },
NY: { count: 1, city: ['New York City'], population: 500 }
};
Редактировать: Это то, как я начал, и застрял. Ключ возвращается с состоянием, но значения переопределяются самым последним объектом.
function mergeValues(list) {
var obj = {};
list.forEach(item => {
obj[item.state] = Object.assign({}, item);
});
return obj;
}