gpt4 book ai didi

javascript - 如何合并对象数组

转载 作者:行者123 更新时间:2023-11-30 13:51:07 27 4
gpt4 key购买 nike

我有一个对象数组,我正在尝试合并这些对象。我正在尝试创建一个将列表作为参数并返回新对象的函数。

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;
}

最佳答案

减少它的退出很容易。

function transform(list) {
return list.reduce((latestState, { state, city, population }) => {
const isNewEntry = !(state in latestState);
if(isNewEntry){
latestState[state] = {
count: 1,
city: [city],
population: population
}
}else{
latestState[state] = {
count: latestState[state].count + 1,
city: [...latestState[state].city, city],
population: latestState[state].population + population
}
}
return latestState;
}, {});
}

那么这里发生了什么。

使用 reduce,我们遍历列表,每个新循环我们都会收到最新状态,在这个例子中,我们从一个空对象开始。

接下来,我们检查条目是否需要创建或更新(存在)。我们根据 isNewEntry 创建或更新条目。

https://codesandbox.io/s/amazing-ellis-mh4b6

关于javascript - 如何合并对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58224541/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com