2010-12-11 73 views
0

下一个最低值,我有一个多维数组(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}]}]} 

我有一些JavaScript来获得当前的子任务我试图通过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,然后运行哟你在循环之外的命令。像这样:

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 
var ntNext, nstNext; 
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){ 
       nextStep = tasks[nt].sub-tasks[nst].startTime; 
       ntNext = nt; 
       nstNext = nst; 
     } 
     } 
} 
jQuery('div#nextTask').text(tasks[ntNext].sub-tasks[nstNext].sub-task); 
} 

请注意,如果两个开始时间相同,它将返回它在该开始时间找到的第一个任务。

+0

不好意思再次回到这个mVChr,一直呆在地狱里。 – pedalpete 2010-12-19 20:39:05