[Javascript] Hoogste waarde in een array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • schiemsky
  • Registratie: Augustus 2006
  • Laatst online: 18-02-2024
Ik heb een probleempje met een javascript.
Eerst wat situeren:
- Er worden coördinaten gebruikt om weer te geven op een google map
- Meerdere punten van eenzelfde dag worden aan elkaar gekoppeld tot een 'route' (polyline)
- Bij elke 'meting' hoort (hoorde) een icoontje: meting 1, meting 2,... meting 100 (100 genummerde iconen zijn er)
- Het eerste icoon geeft de start aan, en is een groen (zie code)

Wat wil ik veranderen?
- De code op zich werkt, geen probleem
- Ik zou graag ook de laatste 'meting' een ander, specifiek icoon geven, en de rest van de iconen behouden

Heb ik het al geprobeerd?
- Ja hoor, maar ik ken er gewoon niet zo veel van. Na opzoekwerk vermoed ik dat het over een max() gaat, maar ik heb reeds enkele keren deze proberen in te bouwen in de code, zonder succes echter. Vandaar mijn vraag: wie zet me op het juiste spoor?

De code (het relevante deel):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var allPoints = new Array();
    var incrementer = trackEndIndex > 99 ? 2 : 1;
    for (var i = trackStartIndex; i <= trackEndIndex; i = i+incrementer)
    {
        elements = lines[i].split(",");
        var latlng = new GLatLng(parseFloat(elements[3]), parseFloat(elements[4]));
        allPoints.push(latlng)
        var icon;

    var currentTime = new Date(elements[2]*1000)

//zo geschreven dat het eerste icoon een groen is, en de blauwe
//voor de volgende punten is er een iconenset die van 2-100 gaat, en zo ook genoemd is

var description = '<b>Voorbeeld</b>;
        if (allPoints.length == 1)
        {
            icon = new GIcon(G_DEFAULT_ICON, "icoon/groen.png");
        }
        else
        {
            icon = new GIcon(G_DEFAULT_ICON, "icoon/2/" + allPoints.length + ".png");
            var line = new GPolyline(allPoints);
            description += '<br>Voorbeeld';

[ Voor 0% gewijzigd door NMe op 10-04-2011 13:28 . Reden: Code-tags ]


Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
Wat je niet zegt is wat gaat er concreet fout?

Als ik het goed heb staat deze code in je loop, maar hier staat eigenlijk dat als het totaal aantal punten gelijk is aan 1 zet hem in het groen.
code:
1
if (allPoints.length == 1)

probeer eens
code:
1
if (i == trackStartIndex)

en voor je rode maak je dan
code:
1
if (allPoints.length == i)

of je gebruikt
trackEndIndex ipv allPoints.length
Ik heb geen idee wat je die als waarde geeft

[ Voor 14% gewijzigd door Precision op 10-04-2011 12:18 ]

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat is er precies lastig aan het kijken of je huidige element i gelijk is aan het laatste element allPoints.length?

Ik heb even code-tags toegevoegd aan je startpost: doe je dat de volgende keer zelf? En ik neem aan dat de rood onderstreepte fout op regel 15 niet écht in je code zit? ;) Verder: Waar hoort mijn topic?

PRG>>WEB

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
NMe schreef op zondag 10 april 2011 @ 13:30:
Wat is er precies lastig aan het kijken of je huidige element i gelijk is aan het laatste element allPoints.length?
Het huidige element is altijd het laatste element binnen een loop waar je het huidige element net op het array gezet hebt met een push() operatie. Dat gaat hem dus niet worden.

(Hopelijk bedoel je trouwens ook "het laatste element allPoints.length - 1". ;) )


Dit lijkt me meer een gooi in de richting van wat de TS wil bereiken:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var points = [], inc = ( trackEnd > 99 ) ? 2 : 1;

for ( var i = trackStart; i <= trackEnd; i = i + inc ) {
  var point = lines[ i ].split( "," );
  
  point = {
    desc   : "<b>Voorbeeld</b>",
    time   : new Date( point[ 2 ] * 1000 ),
    latlng : new GLatLng( parseFloat( point[ 3 ]), parseFloat( point[ 4 ]))
  };

  if ( i === trackStart ) {
    point.icon = new GIcon( G_DEFAULT_ICON, "icoon/groen.png" );
  }
  else if ( i + inc >= trackEnd ) {
    point.icon = new GIcon( G_DEFAULT_ICON, "icoon/blauw.png" );
  }
  else {
    point.icon = new GIcon( G_DEFAULT_ICON, "icoon/2/" + allPoints.length + ".png" );    
  }

  points.push( point );
}


// Extracting data for the polyline, using the Array.prototype.map function from JavaScript 1.6 :
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map

var polylineOverlay = new GPolyline( points.map( function( n ){ return n.latlng; }));
var polylineDescription = points
  .map( function( n ) { return n.desc; })
  .join( "<br />" );