Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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_Jquery_Arrays - Fatal编程技术网

按时间差对javascript数组进行分组 输入示例:

按时间差对javascript数组进行分组 输入示例:,javascript,jquery,arrays,Javascript,Jquery,Arrays,我试着在每个玩家的时间列表中循环,并以不到2小时的时间差对该数组中的每个项目进行分组 我尝试循环遍历数组中的每个元素,并编写一个if条件来查看哪些元素匹配。但是,我无法在单独的数组中推送分组的元素 预期产出: 如果需要,可以更改对象的结构 提前一吨Thx。写一个函数来标准化你的时间,写一个函数来比较一个时间与上一次给定的初始条件-无限,循环你的数组 请发布您尝试过的代码,可能还有一个JSFIDLE演示。您必须以某种方式解析时间。如果时间字符串都使用您的问题中的格式,那么它应该相当简单。解析完字符

我试着在每个玩家的时间列表中循环,并以不到2小时的时间差对该数组中的每个项目进行分组

我尝试循环遍历数组中的每个元素,并编写一个if条件来查看哪些元素匹配。但是,我无法在单独的数组中推送分组的元素

预期产出: 如果需要,可以更改对象的结构


提前一吨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"]
        }
    }
]