我正在尝试实现一个相当复杂的迭代,但到目前为止使用reduce 还没有成功。这是一个小例子
输入如下
let input = {
"data": [
{
"state": "CA",
"city": [ "Mountain View"],
"metadata": { "id": 15 },
},
{
"state": "TX",
"city": [ "Austin" ],
"metadata": { "id": 15 },
},
{
"state": "AZ",
"city": [ "Flagstaff" ],
"metadata": { "id": 10 },
},
],
}
正如您可以清楚地看到的,
id
在 2 个对象中重复了两次。我想当 id 相同时将这两个对象连接成一个。因此,如果有 3 个具有相同 id 的对象,我想将 3 个对象连接为一个。除此之外,我还想在 id 匹配时连接 state
和 city
属性。
所以我的最终输出应该是这样的
let result = {
"data": [
{
"state": ["CA", "TX"],
"city": ["Mountain View", "Austin"],
"metadata": { "id": 15 },
},
{
"state": "AZ",
"city": [ "Flagstaff" ],
"metadata": { "id": 10 },
},
],
}
有人可以让我知道如何精确实现这一目标吗?这是我尝试使用reduce的方法,但我无法得到预期的最终结果。
let result = Object.values(input?.data?.reduce((acc, {state, city, metadata}) => {
if (!acc[metadata?.id]) {
acc[metadata?.id] = { id };
}
acc[metadata?.id].state = acc[metadata?.id].state.concat(state);
acc[metadata?.id].city = acc[metadata?.id].city.concat(city);
return acc;
}, {}));