将数组中的第一个和最后一个值分组(连续值是包含第一个和最后一个元素的组)

时间:2016-10-28 03:58:06

标签: javascript jquery arrays object

我有一个时间间隔的对象数组,数字0表示星期日。在我的时间安排页面中选择特定日期的不同时间范围。我想分组时间值。我的初始数组如下所示

时间表选择看起来像

enter image description here

每个单元格都有data-daydata-time属性以及具有data-selected属性的选定单元格

我在选定的时间内迭代,得到的结果如

var selectedIntervals = {};

$('td[data-selected]').each(function() {
  var a = $(this).attr('data-day');
  var b = $(this).attr('data-time');

  if(!selectedIntervals[a]) {
       selectedIntervals[a]=[];
  }
  selectedIntervals[a].push(b);
});

enter image description here

我希望输出像

{
         0: [["00:00", "05:00"],["08:00", "11:00"]]

}

请帮忙。

4 个答案:

答案 0 :(得分:1)

这是一个从小时字符串数组中创建间隔的函数。

  function makeInterval(arr) {
    //e.g. arr = ["00:00", "01:00", "02:00", "03:00", "06:00", "10:00", "11:00"]
    //returns [["00:00", "03:00"], ["06:00", "06:00"], ["10:00", "11:00"]]
    var interval, result = [];
    for (var i = 0; i < arr.length; i++) {
      var hour = parseInt(arr[i]);
      if (!interval || (hour != parseInt(interval[1]) + 1)) { //if first time or the hour jumps
        interval = [arr[i], arr[i]];  //create new interval
        result.push(interval);
      }
      else {
        interval[1] = arr[i]; //update the end of interval
      }
    }
    return result;
  }

你可以称之为

  makeInterval(selectedIntervals[0]);
如果有必要,

在天数上做一个循环。

答案 1 :(得分:1)

试试这个:

arr = ["00:00", "01:00", "02:00", "03:00", "04:00", "05:00", "08:00", "09:00", "10:00", "11:00"];
output = [];
start = arr[0];
for(i=1; i<arr.length; i++) {
    if(i == arr.length-1) {
        output.push([start, arr[i]]);   
        break;
    }
    if(parseInt(arr[i]) - parseInt(arr[i-1]) > 1) {
        output.push([start, arr[i-1]]);
        start = arr[i];
    }
}

答案 2 :(得分:0)

mid = a.length
mid=parseInt(a.length / 2)
b=[[a[0],a[mid]],[a[mid+1],a[a.length-1]]]
console.info(b)

答案 3 :(得分:0)

将您的初始代码与elfan代码相结合您可以得到:

$(function() {

    var list = {};
    
    var day = 0;
    list[day] = selectedSchedules(day);
    day = 1;
    list[day] = selectedSchedules(day);
    
    console.log(list);

    function selectedSchedules(day) {
        var schedules = [];
        var interval, hour;
        $('td[data-selected][data-day=' + day + ']').each(function() {
            var b = $(this).data('time');
            var current = parseInt(b);
            if (!interval || (current != parseInt(interval[1]) + 1)) {
                interval = [b, b];
                schedules.push(interval);
            } else {
                interval[1] = b;
            }
        });
        
        return schedules;
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
    <tbody>
        <tr>
            <td data-day="0" data-time="00:00" data-selected="true">00:00</td>
            <td data-day="1" data-time="00:00" data-selected="true">00:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="01:00" data-selected="true">01:00</td>
            <td data-day="1" data-time="01:00" data-selected="true">01:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="02:00" data-selected="true">02:00</td>
            <td data-day="1" data-time="02:00" data-selected="true">02:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="03:00" data-selected="true">03:00</td>
            <td data-day="1" data-time="03:00" data-selected="true">03:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="04:00" data-selected="true">04:00</td>
            <td data-day="1" data-time="04:00" data-selected="true">04:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="05:00" data-selected="true">05:00</td>
            <td data-day="1" data-time="05:00" data-selected="true">05:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="06:00">06:00</td>
            <td data-day="1" data-time="06:00">06:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="07:00">07:00</td>
            <td data-day="1" data-time="07:00">07:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="08:00" data-selected="true">08:00</td>
            <td data-day="1" data-time="08:00">08:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="09:00" data-selected="true">09:00</td>
            <td data-day="1" data-time="09:00" data-selected="true">09:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="10:00" data-selected="true">10:00</td>
            <td data-day="1" data-time="10:00" data-selected="true">10:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="11:00" data-selected="true">11:00</td>
            <td data-day="1" data-time="11:00" data-selected="true">11:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="12:00">12:00</td>
            <td data-day="1" data-time="12:00" data-selected="true">12:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="13:00">13:00</td>
            <td data-day="1" data-time="13:00">13:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="14:00">14:00</td>
            <td data-day="1" data-time="14:00">14:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="15:00">15:00</td>
            <td data-day="1" data-time="15:00">15:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="16:00">16:00</td>
            <td data-day="1" data-time="16:00">16:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="17:00">17:00</td>
             <td data-day="1" data-time="17:00">17:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="18:00">18:00</td>
            <td data-day="1" data-time="18:00">18:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="19:00">19:00</td>
            <td data-day="1" data-time="19:00">19:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="20:00">20:00</td>
            <td data-day="1" data-time="20:00" data-selected="true">20:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="21:00">21:00</td>
            <td data-day="1" data-time="21:00" data-selected="true">21:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="22:00">22:00</td>
            <td data-day="1" data-time="22:00" data-selected="true">22:00</td>
        </tr>
        <tr>
            <td data-day="0" data-time="23:00">23:00</td>
            <td data-day="1" data-time="23:00" data-selected="true">23:00</td>
        </tr>

    </tbody>
</table>