按时间差对javascript数组进行分组 输入示例:
我试着在每个玩家的时间列表中循环,并以不到2小时的时间差对该数组中的每个项目进行分组 我尝试循环遍历数组中的每个元素,并编写一个if条件来查看哪些元素匹配。但是,我无法在单独的数组中推送分组的元素 预期产出: 如果需要,可以更改对象的结构按时间差对javascript数组进行分组 输入示例:,javascript,jquery,arrays,Javascript,Jquery,Arrays,我试着在每个玩家的时间列表中循环,并以不到2小时的时间差对该数组中的每个项目进行分组 我尝试循环遍历数组中的每个元素,并编写一个if条件来查看哪些元素匹配。但是,我无法在单独的数组中推送分组的元素 预期产出: 如果需要,可以更改对象的结构 提前一吨Thx。写一个函数来标准化你的时间,写一个函数来比较一个时间与上一次给定的初始条件-无限,循环你的数组 请发布您尝试过的代码,可能还有一个JSFIDLE演示。您必须以某种方式解析时间。如果时间字符串都使用您的问题中的格式,那么它应该相当简单。解析完字符
提前一吨Thx。写一个函数来标准化你的时间,写一个函数来比较一个时间与上一次给定的初始条件-无限,循环你的数组
请发布您尝试过的代码,可能还有一个JSFIDLE演示。您必须以某种方式解析时间。如果时间字符串都使用您的问题中的格式,那么它应该相当简单。解析完字符串后,只需在字符串上循环并跟踪差异,然后将它们放入各自的桶中。向我们展示您迄今为止所做的尝试可以让我们向您提供反馈。如果您有上午7:00、上午9:00、上午11:00这样的时间,那么预期的输出是什么?@user3771837您共享的示例代码给出了一个想法,即所有给定的时间都遵循12小时时钟。因此,如果给定的输入是{8:00am,10:00am,12:00PM,2:00PM},那么预期的答案是{0:[8:00am,10:00am,12:00PM,2:00PM]}。。??同样,几乎相同的输入{8:00AM,10:00AM,12:00AM,2:00PM},然后根据12小时时钟逻辑&2小时或更少的时差,预期的答案是{0:[8:00AM,10:00AM],1:[2:00PM],2:[12:00AM]}。。?对吗?@RaeenHashemi:准备好小提琴。现在,将时间解析成24小时格式,然后计算它们之间的时间差。非常有用!你能解释一下你在groupFactory函数中使用的逻辑吗?有点迷路了。groupFactory是一个创建另一个函数的函数。groupFactory中变量的内容将在内部函数的所有调用中共享。这意味着您可以调用内部函数,存储调用中的数据,并让第二次调用根据第一次调用给出结果。这种结构的一个简单示例是一个计数器,每次调用函数makeCounter{var i=0;返回函数{return++i;};};然后计数器=makeCounter;柜台柜台柜台在groupFactory中,它只是一个比较和最后一次推送
var Player = [
{
name: "John",
Events: {
timeList: ["7:00 AM", "9:00 AM", "12:01 PM", "2:00 PM"]
},
groups: {}
},
{
name: "Doe",
Events: {
timeList: ["7:00 AM", "8:00 AM", "10:00 AM", "12:01 PM"]
},
groups: {}
}
];
Player = [
{
name: "John",
Events: {
timeList: ["7:00 AM", "9:00 AM", "12:01 PM", "2:00 PM"]
},
groups: {0: ["7:00 AM", "9:00 AM"], 1: ["12:01 PM", "2:00 PM"]}
},
{
name: "Doe",
Events: {
timeList: ["7:00 AM", "8:00 AM", "9:00 AM", "12:01 PM"]
},
groups: {0: ["7:00 AM", "8:00 AM", "9:00 AM"], 1: ["12:01 PM"]}
}
];
function timeInMin(str) {
str = str.split(/[: ]/);
if (str[0] === '12') {
if (str[2] === 'AM') {
str[1] = 0;
}
} else if (str[2] === 'PM') {
str[0] = (+str[0]) + 12;
}
return 60 * (+str[0]) + (+str[1]);
}
function groupFactory(groups) {
var i = -1, last = -Infinity;
groups = groups || {};
return function addToGroup(time) {
var mins = timeInMin(time);
if (mins - last <= 2 * 60) {
groups[i].push(time);
} else {
++i;
groups[i] = [time];
}
last = mins;
return groups;
};
}
var i, j, gf;
for (i = 0; i < Player.length; ++i) {
gf = groupFactory(Player[i].groups);
for (j = 0; j < Player[i].Events.timeList.length; ++j) {
gf(Player[i].Events.timeList[j]);
}
}
[
{
"name": "John",
"Events": {
"timeList": ["7:00 AM", "9:00 AM", "12:01 PM", "2:00 PM"]
},
"groups": {
"0": ["7:00 AM", "9:00 AM"],
"1": ["12:01 PM","2:00 PM"]
}
},
{
"name": "Doe",
"Events": {
"timeList": ["7:00 AM", "8:00 AM", "10:00 AM", "12:01 PM"]
},
"groups": {
"0": ["7:00 AM", "8:00 AM", "10:00 AM"],
"1": ["12:01 PM"]
}
}
]