Javascript 映射时修改对象输出

Javascript 映射时修改对象输出,javascript,Javascript,我有一个数组的对象,我正试图组。分组工作正常,但输出的格式不是我想要的。我尝试了不同的更改,但无法使其符合我想要的输出 更新: 分组是以开始和结束时间为基础的,所以在所有开始和结束时间相同的情况下分组上课。因此,因为数学和体操的开始和结束时间相同,所以它们被分组在一起。西班牙语课有1套开始和结束时间,如数学和体操,但不应分组,因为它有额外的开始和结束时间 var列表={ “时间表”:[{ “班级名称”:“数学”, “类_状态”:“打开”, “课堂时间”:[{ “开始”:“070000”, “结

我有一个数组的对象,我正试图组。分组工作正常,但输出的格式不是我想要的。我尝试了不同的更改,但无法使其符合我想要的输出

更新:

分组是以开始和结束时间为基础的,所以在所有开始和结束时间相同的情况下分组上课。因此,因为数学和体操的开始和结束时间相同,所以它们被分组在一起。西班牙语课有1套开始和结束时间,如数学和体操,但不应分组,因为它有额外的开始和结束时间

var列表={
“时间表”:[{
“班级名称”:“数学”,
“类_状态”:“打开”,
“课堂时间”:[{
“开始”:“070000”,
“结束”:“131400”
}, {
“开始”:“131500”,
“结束”:“132000”
}]
}, {
“班级名称”:“科学”,
“类别状态”:“已关闭”,
“课堂时间”:假
}, {
“类别名称”:“艺术”,
“类别状态”:“已关闭”,
“课堂时间”:假
}, {
“类别名称”:“历史记录”,
“类别状态”:“已关闭”,
“课堂时间”:假
}, {
“类别名称”:“语言”,
“类别状态”:“已关闭”,
“课堂时间”:假
}, {
“班级名称”:“健身房”,
“类_状态”:“打开”,
“课堂时间”:[{
“开始”:“070000”,
“结束”:“131400”
}, {
“开始”:“131500”,
“结束”:“132000”
}]
},{
“类别名称”:“西班牙语”,
“类_状态”:“打开”,
“课堂时间”:[{
“开始”:“070000”,
“结束”:“131400”
}, {
“开始”:“131500”,
“结束”:“132000”
},
{
“开始”:“211500”,
"完:"222000"
}]
},
{
“班级名称”:“物理学”,
“类_状态”:“打开”,
“课堂时间”:[{
“开始”:“080000”,
“结束”:“131400”
}, {
“开始”:“141500”,
“结束”:“152000”
}]
}]
};
函数合并值(列表){
设obj=Object.fromEntries(list.map(({
课时
})=>[JSON.stringify(class_hr){
计数:0,
类别名称:[],
}]));
list.forEach(({
课时,
类名,
}) => {
obj[JSON.stringify(class_hrs)].count++;
obj[JSON.stringify(class\u hrs)].class\u name.push(class\u name);
});
返回obj;
}

log(合并值(list.time_表))您的基本逻辑似乎正常。只需将
obj
转换为结果中包含
Object.values()
的数组,并将其包装到
{classes:…}
对象中

函数合并值(列表){
设obj=Object.fromEntries(list.map(({
课时
})=>[JSON.stringify(class_hr){
计数:0,
类别名称:[],
}]));
list.forEach(({
课时,
类名,
}) => {
obj[JSON.stringify(class_hrs)].count++;
obj[JSON.stringify(class\u hrs)].class\u name.push(class\u name);
});
返回{classes:Object.values(obj)};
}
变量列表={
“时间表”:[{
“班级名称”:“数学”,
“类_状态”:“打开”,
“课堂时间”:[{
“开始”:“070000”,
“结束”:“131400”
}, {
“开始”:“131500”,
“结束”:“132000”
}]
}, {
“班级名称”:“科学”,
“类别状态”:“已关闭”,
“课堂时间”:假
}, {
“类别名称”:“艺术”,
“类别状态”:“已关闭”,
“课堂时间”:假
}, {
“类别名称”:“历史记录”,
“类别状态”:“已关闭”,
“课堂时间”:假
}, {
“类别名称”:“语言”,
“类别状态”:“已关闭”,
“课堂时间”:假
}, {
“班级名称”:“健身房”,
“类_状态”:“打开”,
“课堂时间”:[{
“开始”:“070000”,
“结束”:“131400”
}, {
“开始”:“131500”,
“结束”:“132000”
}]
},{
“类别名称”:“西班牙语”,
“类_状态”:“打开”,
“课堂时间”:[{
“开始”:“070000”,
“结束”:“131400”
}, {
“开始”:“131500”,
“结束”:“132000”
},
{
“开始”:“211500”,
"完:"222000"
}]
},
{
“班级名称”:“物理学”,
“类_状态”:“打开”,
“课堂时间”:[{
“开始”:“080000”,
“结束”:“131400”
}, {
“开始”:“141500”,
“结束”:“152000”
}]
}]
};

log(合并值(list.time_表))您不能使用
map()
执行此操作。它总是返回与输入相同数量的元素。@Barmar它将返回相同数量的元素,抱歉,我想我忘了添加
来显示输出中的其余元素。为什么要使用JSON字符串作为对象键?请在问题中添加分组逻辑。如果要将具有相同开始/结束时间的所有元素分组到结果中的单个元素中,则它们的元素数将不相同。