2016-10-28 8 views
0

私は時間間隔のあるオブジェクト配列を1つ持っています。私の時間スケジュールページでは、特定の日に異なる時間範囲を選択します。私は時間の値をグループ化したい。各セルはdata-daydata-time属性を持っており、私が選択した時間を反復処理だとなった配列内の最初と最後の値をグループ化します(連続する値は最初と最後の要素を持つグループです)。

data-selected属性でセルを選択し

enter image description here

のように私の最初の配列が

タイムスケジュールの選択の下に与えられているに見えます結果は次のようになります

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"]] 

} 

のような出力が助けてくださいしたいです。

+0

あなたは私たちが働くことができた上でいくつかのコードを投稿することができますか? –

+0

質問がコードで更新されました。あなたがチェックしてください –

+0

私はそれが簡単だろうと思う場合は、配列にbを押す前に、配列の最後のbがbの前の値かどうかをチェックする。そうであれば、それを押し、それ以外の場合は新しい配列をaに追加します。あなたは常に選択された範囲を持っています。 – yopez83

答えて

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]; 
    } 
} 
+0

あなたのお返事ありがとうございます –

0
mid = a.length 
mid=parseInt(a.length/2) 
b=[[a[0],a[mid]],[a[mid+1],a[a.length-1]]] 
console.info(b) 
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]); 

のようにそれを呼び出すことができます。

+0

あなたのお返事ありがとうございます –

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>

関連する問題