gpt4 book ai didi

javascript - 如何在 Javascript 中区分和合并对象数组中的对象

转载 作者:行者123 更新时间:2023-12-02 21:32:10 25 4
gpt4 key购买 nike

我有一个对象数组。

[
{ _id: { year: 2020, month: 1 } },
{ _id: { year: 2019, month: 1 } },
{ _id: { year: 2019, month: 2 } },
{ _id: { year: 2019, month: 4 } },
{ _id: { year: 2019, month: 5 } },
{ _id: { year: 2019, month: 8 } },
{ _id: { year: 2019, month: 9 } },
{ _id: { year: 2019, month: 11 } }
]

我想从对象中删除重复的年份属性,并将不同的月份数据推送到一个数组对象中。

我想得到以下输出:

[
{
"_id": {
"year": 2020,
"month": [1]
}
},
{
"_id": {
"year": 2019,
"month": [1, 2, 4, 5, 8, 9, 11]
}
}
]

我已经尝试过,但无法获得预期的输出:

let arr = [
{ _id: { year: 2020, month: 1 } },
{ _id: { year: 2019, month: 1 } },
{ _id: { year: 2019, month: 2 } },
{ _id: { year: 2019, month: 4 } },
{ _id: { year: 2019, month: 5 } },
{ _id: { year: 2019, month: 8 } },
{ _id: { year: 2019, month: 9 } },
{ _id: { year: 2019, month: 11 } }
];

let newArr= [];
arr.forEach(function (item) {
let isMatch = newArr.filter(function (elem) {
return elem._id.year === item._id.year
})
if (isMatch.length == 0) {
newArr.push(item)
}
else {
newArr.find(x => x._id.year === item._id.year)._id.month.push(...item._id.month);
}
})
console.log(newArr);

最佳答案

您可以尝试使用Array.reduce :

let input = [
{ _id: { year: 2020, month: 1 } },
{ _id: { year: 2019, month: 1 } },
{ _id: { year: 2019, month: 2 } },
{ _id: { year: 2019, month: 4 } },
{ _id: { year: 2019, month: 5 } },
{ _id: { year: 2019, month: 8 } },
{ _id: { year: 2019, month: 9 } },
{ _id: { year: 2019, month: 11 } }
];

let result = input.reduce((state, current) => {
let prev = state.find(x => x._id.year === current._id.year);
if(prev){
prev._id.months.push(current._id.month);
}
else{
state.push({_id: { year: current._id.year, months: [ current._id.month ] } });
}
return state;
},[]);

console.log(result);

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

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