2010-12-11 14 views
0

私は現在のサブタスクを取得するための、いくつかのJavaScriptを持っている多次元配列(JSONエンコードされたので、まだ右の専門用語ということがある?)多次元配列から次に低い値になっ

 
{"tasks":[{"task":"first parent task", "sub-tasks":[{"sub-task":"first sub task", "startTime":0, "endTime":30}, {"sub-task":"second sub task", "startTime":65, "endTime":90}]}, 
{"task":"second parent task", "sub-tasks":[{"sub-task":"task 2 sub task 1", "startTime":35, "endTime":45},{"sub-task":"task 2 sub task 2", "startTime":95, "endTime":100}]}]} 

を持っています私はstarttimeで次のサブタスクを取得しようとしていますが、何らかの理由で、同じ親タスクで次のサブタスクしか取得できません。 は、だから私はすべき出力を探しているものをここに

 
first parent task - first sub task -> nextTask = second parent task - task 2 sub task 1 -> nextTask = first parent task -> second sub task -> nextTask = second parent task - task 2 sub task 2 

である私は現在持っているコードですが、それは、同じアレイ内で私にサブタスクを与えます。

 
for(var r=0;r<tasks.length;r++){ 
    for (var i = 0; i<tasks[r].sub-tasks.length){ 
     if(tasks[r].sub-tasks[i].startTime==currenttimer){ 
     showTask(tasks[r].sub-tasks[i], tasks); 
    } 
    } 
} 
function showTask(current, tasks){ 
    jQuery('div#currentTask').text(current.sub-task); 
    var nextStep = current+200; // just to set the next beyond the length of all tasks 
    for (var nt=0; nt<tasks.length; nt++){ 
      for (var nst=0; nst<tasks[nt].sub-tasks.length; nt++){ 
      if(tasks[nt].sub-tasks[nst].startTime<nextStep 
       && tasks[nt].sub-tasks[nst].startTime>current.startTime){ 
      jQuery('div#nextTask').text(tasks[nt].sub-tasks[nst].sub-task); 
       } 
      } 
     } 
    } 

このコードは最初の親タスクのサブタスクのみを返しますが、その理由はわかりません。これを行うより良い方法はありますか?

(VAR Rの初期...文では、キャンバス上に描画する別のループ内で実行されるので、私はループにDOMを毎秒以上の更新から保つために、この方法を実行します。

私は入れたくありませんstartTimeを別の配列にするか、配列を取得して元のjsonを参照する必要がありますが、それはちょうど廃棄物のように見えます。

答えて

1

あなたは基本的にテストの対象となる最初のノードを探していますあなたが探している必要があるのは、現在のステップよりも大きいものです。nextStepを更新し、ntnstを保存してから、yoを実行してくださいループの外側にはurコマンドがあります。同様に、

2つの開始時刻が同じ場合、その開始時刻で見つかった最初のタスクが返されることに注意してください。

+0

このmVChrに戻るのが遅れて申し訳ありませんが、地獄にいました。 – pedalpete