Een waardetoevoegen aan een array in een loop, waarde word NaN

Status
Niet open voor verdere reacties.

nestor973

Gebruiker
Lid geworden
4 feb 2015
Berichten
5
Hoi allen,

ik zit hier met een probleem waar ik maar niet uitkom, ik heb onderstaande code :

Code:
 ...

         for ( i1 in urendata )
                {
                  var item = urendata[i1];
                  var urendatum = item.date;
                  var hour_day = item.hour;

                 if ( (+urendatum >= +start_waterdatum.toDate()) && (+urendatum <= +end_waterdatum.toDate()) )
                        {
                          for (i = 1; i < 24; i++) {
                             if (hour_day == i)
                              {
                                  water_hour_array[i] = water_hour_array[i] + item.water;
                              }
                              
                        }
                      }
                  console.log(water_hour[1]);
                }
     }

de fout zit hem in het feit dat hij de waarde niet wil toevoegen aan de array (item.water dus) . Als ik enkel de waarde
water_hour_array=item.water doe, dan heb ik wel de waarde in die array, maar hij moet hem wel optellen . wat
zie ik hier over het hoofd?

alvast bedankt
 
Welkom op Helpmij :)

Bevat item.water altijd een integer waarde? Debug anders item eens. Ik zie dat je wel een andere variabele logt namelijk water_hour[1], alleen zie ik die in dit stukje code verder niet voorbij komen.

Overigens kun je dit:
[js]water_hour_array = water_hour_array + item.water;[/js]
Ook vervangen door dit:
[js]water_hour_array += item.water;[/js]
 
Ja, de waarde is altijd aanwezig, daar had ik via een Console.log al op getest.

de oplossing
Code:
water_hour_array[i] += item.water;

had ik ook al getest, heeft net hetzelfde resultaat.

de waarde console.log(water_hour[1]); was inderdaad foutief hier geplaatst, dat moest de correcte array water_hour_array[1] zijn :)
maar dat was niet het probleem hier. Het probleem is nog steeds dat ik mijn waarde niet kan optellen aan de bestaande waarde in
de array; Just makes no sense :(
 
Laatst bewerkt:
Geeft dit je betere debug informatie?
[js]
for ( i1 in urendata ) {
var item = urendata[i1];
var urendatum = item.date;
var hour_day = item.hour;
if ( (+urendatum >= +start_waterdatum.toDate()) && (+urendatum <= +end_waterdatum.toDate()) ) {
for (i = 1; i < 24; i++) {
if (hour_day == i) {
console.log(water_hour_array, item.water);
water_hour_array += item.water;
}
}
}
console.log(water_hour[1]);
}
[/js]
Wordt die water_hour_array wel ergens gedefineerd? Als de initiële waarde geen integer is dan gaat het optellen waarschijnlijk niet goed. Dat zul je als het goed is terug moeten zien wanneer je bovenstaande code uitvoert.
 
ja

daarboven word ie gedefinieerd als

var water_hour_array = [];

Had ik ook al getest met

var water_hour_array = new Array();
var water_hour_array = new Int16Array();
var water_hour_array = new Int32Array();
var water_hour_array = new Int8Array();

Uit de debuginformatie van je vooropgestelde code blijkt dat de waarde van mijn array NaN (not a number) is ... ? Hoe kan dit :S
 
Laatst bewerkt door een moderator:
Ik vermoed dat het bij de initialisatie mis gaat, probeer dit eens:
[js]
for ( i1 in urendata ) {
var item = urendata[i1];
var urendatum = item.date;
var hour_day = item.hour;
if ( (+urendatum >= +start_waterdatum.toDate()) && (+urendatum <= +end_waterdatum.toDate()) ) {
for (i = 1; i < 24; i++) {
if (hour_day == i) {
if (!water_hour_array) {
water_hour_array = 0;
}
water_hour_array += item.water;
}
}
}
console.log(water_hour[1]);
}[/js]
Nu check ik eerst of er in de water_hour_array een key "i" bestaat, zo niet dan stel ik die in en zet de waarde op 0
 
Man ,that did the trick !!!!

hier heb ik dus een ganse dag naar gezocht , zonder resultaat.

Hoe kan ik je bedanken !! THX ALLOT !
 
Laten we beginnen met het op "Opgelost" zetten van deze vraag ;) (Kan onderaan het eerste bericht)

Controleer bij foutmeldingen goed wat voor type waarde (null, string, integer) een variabele heeft op de regel voordat je deze aan wilt passen (of in dit geval er mee wilt rekenen)

Dit kun je doen door gebruik te maken van typeof. In dit geval zou dit:
[js]console.log(typeof water_hour_array)[/js] een "undefined" opleveren. Dat houdt dus in dat je eerst een beginwaarde nodig hebt voordat je kunt gaan rekenen.
 
Ok, heb ik gedaan; Sorry voor mijn wat stuntelige forumgedrag, ben nog niet zo goed op de hoogte van het gebruik blijkbaar ;-)

Ik had inderdaad Undefined soms zien verschijnen ook; Ik ben nu ook geen Javascript genie, it shows .

Nogmaals bedankt !
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan