Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按条件减少和分组_Javascript_Arrays_Css Grid_Reduce - Fatal编程技术网

Javascript 按条件减少和分组

Javascript 按条件减少和分组,javascript,arrays,css-grid,reduce,Javascript,Arrays,Css Grid,Reduce,我有一个计算同时发生的最大事件(HH:mm)的函数。下面的示例有三个事件同时发生。我想将事件分组,如下面的示例 结果应该是: 数字会议00:00-01.00 第一组: 支持00.00-00.25 第2组: 预订会议00:30-01:30 个人会议00:30-01:30 到目前为止,我只能找到一个单一事件的发生。我想我必须使用减速器和条件 let事件=[ { id:9, 起点:0, 完:60,, 标题:“数字会议” }, { id:80, 开始时间:30, 完:90,, 标题:“图书会议”

我有一个计算同时发生的最大事件(HH:mm)的函数。下面的示例有三个事件同时发生。我想将事件分组,如下面的示例

结果应该是:

数字会议00:00-01.00

  • 第一组:
    支持00.00-00.25

  • 第2组:
    预订会议00:30-01:30
    个人会议00:30-01:30

到目前为止,我只能找到一个单一事件的发生。我想我必须使用减速器和条件

let事件=[
{
id:9,
起点:0,
完:60,,
标题:“数字会议”
},
{
id:80,
开始时间:30,
完:90,,
标题:“图书会议”
},
{
id:81,
开始时间:30,
完:90,,
标题:“个人会议”
},
{
id:84,
起点:0,
完:24,,
标题:“支持”
}]
events.forEach(项目=>{
//找到匹配项
const matchedItems=events.filter(o=>{
返回o.start=item.start&&item.id!==o.id;
});
log(`Matched for${item.id}`,matchedItems)
//从事件数组中删除匹配项,以避免重复
//移除(匹配项);
//设置项目格式并将其放置在日历网格中
//格式([item,…matchedItems]);

});我为您实现了一个函数,请参见下面的代码,欢迎使用

//计算两个事件是否重叠,无论它们的顺序如何
功能重叠(eventA、eventB){
//排序输入
const[first,second]=[eventA,eventB].sort((a,b)=>a.start-b.start);
//检查事件是否重叠
常数重叠=first.end>second.start;
返回重叠;
}
//使用组创建贴图对象
//也按时间排序
//每个组都包含事件对象
函数findVerlaps(事件、查询){
//结果
常量组={};
//事件来为其生成组
const queryEvent=events.find(e=>e.title==query);
//要检查的其他事件与查询的事件重叠
const eventsWithoutQuery=events.filter(e=>e.title!==query);
eventsWithoutQuery.forEach(事件=>{
const overlaps=重叠(事件、查询事件);
//如果有重叠
如果(重叠){
//构造组名
const groupName=`${event.start}-${event.end}`;
//如果组alread存在,请使用它,否则创建一个空组(数组)
常量组=组[groupName]?组[groupName]:[];
组推(事件);
//将组放回组映射并相应地命名
组[组名]=组;
}
});
//确保组中的键已排序(可选)
const sortedKeys=Object.key(groups.sort();
const sortedGroups=sortedKeys.reduce(
(会计科目,当前)=>({
…acc,
[当前]:组[当前]
}),
{}
);
//返回排序映射
返回分类组;
}
//事件
让事件=[
{
id:9,
起点:0,
完:60,,
标题:“数字会议”
},
{
id:80,
开始时间:30,
完:90,,
标题:“图书会议”
},
{
id:81,
开始时间:30,
完:90,,
标题:“个人会议”
},
{
id:84,
起点:0,
完:24,,
标题:“支持”
}
];
log(“迭代数字会议组”);
//构建“数字会议”小组
const groups=findOverlaps(事件,“数字会议”);
//迭代数字会议的重叠地图
对象项(组)的常量[groupName,eventsOfGroup]{
日志(groupName,eventsOfGroup);
}
log(“迭代所有内容”);
events.forEach(e=>{
console.log(“组:”+e.title);
对于(Object.entries(findOverlaps(events,e.title))的常量[groupName,eventsOfGroup]){
日志(groupName,eventsOfGroup);
}  
});