2010-12-11 21 views
0

J'ai un tableau multidimensionnel (codé JSON, donc est-ce toujours la bonne terminologie?)obtiennent la prochaine valeur la plus faible du tableau multidimensionnel

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

Je javascript pour obtenir la sous-tâche en cours et j'essaie d'obtenir la sous-tâche suivante au début, mais pour une raison quelconque, je reçois seulement la sous-tâche suivante dans la même tâche parent. Donc ce que je suis à la recherche de la sortie d'être est

 
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 

ici est le code que j'ai actuellement, mais il ne me donne que des sous tâches à l'intérieur du même tableau. Ce code renvoie uniquement les premières sous-tâches de la tâche parente, mais je ne sais pas pourquoi. Y a-t-il une meilleure manière de faire cela?

L'initiale (var r ... dans une autre déclaration exécute boucle dessin sur une toile, alors je courir les boucles de cette façon pour éviter de mettre à jour les DOM chaque seconde ou plus.

Je préférerais ne pas mettre le startTime dans un tableau séparé ou quoi que ce soit comme je devrais prendre ce tableau et se référer à l'original json de toute façon et il semble juste comme un gâchis

Répondre

1

Vous trouvez fondamentalement le premier nœud qui se qualifie sous votre test Ce que vous devez trouver est le plus bas qui est plus grand que votre étape actuelle, donc vous devriez juste mettre à jour nextStep, stocker nt et nst, puis lancer yo ur commandes en dehors de la boucle. Comme si:

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); 
} 

Notez que si deux heures de début sont les mêmes, il retourne la première tâche qu'il trouve avec ce temps de démarrage.

+0

Désolé pour le retard de revenir à ce mVChr, été dans l'enfer algo. – pedalpete