Toon posts:

[js] plan van aanpak

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben op zoek naar een plan van aanpak (in js) voor het volgende probleem. Ik heb een stel rijen met daarin onder andere een tijd en een naam, nu moet ik nagaan of het interval tussen 2 tijden bij dezelfde naam niet te klein wordt (kleiner dan 20 minuten) en in dat geval de namen een kleurtje geven. Dus:

code:
1
2
3
4
5
6
09.00     Lady
09.07     Zwartje
09.14     Lady
10.00     Zwartje
10.07     Opera
10.14     Lady

Tijden zijn altijd oplopend, maar niet noodzakelijk lineair. In dit voorbeeld wil ik dus de eerste 2x Lady rood hebben. Hoe pak ik zoiets nu slim aan?

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
een multidimensionale array maken waarin je de tijden per naam groepeerd. Ondertussen dat je die array opbouwd kan je gelijk checken of de tijden niet te klein worden (de tijden zijn immers oplopend) en de acties die daaraan gekoppeld zijn uitvoeren (een kleurtje geven).

[ Voor 7% gewijzigd door Borizz op 26-05-2006 15:04 ]

If I can't fix it, it ain't broken.


  • André
  • Registratie: Maart 2002
  • Laatst online: 20-02 09:23

André

Analytics dude

Even kort brainstormend: ga met een lus er doorheen en sla de namen in een 2D array op. Kom je dan bij een naam die eerder geweest is kun je checken of het verschil < 20 minuten is. Zo niet dan rood maken.

Door in die 2D array referenties naar corresponderende objecten op te slaan kan het rood maken ook veel sneller.

De tijden vergelijken kun je volgens mij het beste doen door ze in een time (date) object te gooien en die van elkaar af te trekken.

Verwijderd

Topicstarter
hmz, tijdens het opbouwen checken, da's op zich wel een aardig plan ja en dan terug uit denk ik

nu wil ik dit eigenlijk realtime doen, de lijst is al compleet, maar tijden en namen kunnen veranderen of van plek wisselen. Komt een beetje brute force over om dan de hele array opnieuw op te bouwen, maar volgens mij is dat niet zo'n hele grote ramp

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Je zou een soort van sorted list kunnen maken, waarbij de elementen automatisch worden gesorteerd bij het toevoegen. Maar als het geen grote lijst is, is kan je beter de array gewoon rebuilden (scheelt namelijk een hoop programmeerwerk dan).

If I can't fix it, it ain't broken.


  • Arjan
  • Registratie: Juni 2001
  • Niet online

Arjan

copyright is wrong

Ik zou de tijd in seconden/minuten gewoon aan het object hangen. Dan hang je ook nog een functie die checkt of de naam boven/onder het item binnen de 20 minuten marge zit.
Als je dan die laatste functies kan aanroepen wanneer er data veranderd wordt, ben je klaar. als je die mogelijkheid niet hebt moet je een interval instellen om te checken.


whoopsie, niet goed gelezen... :X

[ Voor 6% gewijzigd door Arjan op 26-05-2006 16:01 ]

oprecht vertrouwen wordt nooit geschaad


Verwijderd

Topicstarter
heb 'm nu zo:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function checkInterval() {
    var items = [],r;
    rows = document.getElementById('overzicht').getElementsByTagName('tr');
    for (var i=0; i<rows.length; i++) if (r=rows[i].getElementsByTagName('input')[8]) r.className = '';
    for (var i=0; i<rows.length; i++) {
        var inps = rows[i].getElementsByTagName('input');
        if (inps.length!=0) {
            var row = [inps[3],inps[8]];        
            var j = items.length;
            while (j--) {
                if ((row[1].value == items[j][1].value) && ((row[0].timeValue.getTime() - items[j][0].timeValue.getTime()) < (proefTijd + rustTijd)*60000)) {
                    row[1].className = 'problem';
                    items[j][1].className = 'problem';
                }
            }
            items[items.length] = row;  
        }
    }
}

beide velden per rij zijn inputs dus, de tijdinput had er al een date() object aanhangen (timeValue), verder zijn de twee waar het om draait de 3e en 8e input in de hele rij en zijn er ook rijen zonder inputs (header rijen), vandaar dus wat checks erin. De waarde proeftijd+rusttijd is de minimale tijd die er tussen moet zitten.

met classNames ipv direct style om style een beetje gescheiden te houden.

(maf he, dan zie je even niet hoe je het algorithme het beste kan doen, krijg je 1 keyword en je pent het zo op)

[ Voor 18% gewijzigd door Verwijderd op 26-05-2006 16:13 ]

Pagina: 1