1

I'm trying to iterate through a large array of values and collect an average of one of the values for each second. I can't get this code to work properly, and as far as I can see the issue is with the nested while loop. am I making a scope error that's preventing me from iterating the for loop index?

The data is a timestamp in ms and a radiation count. a.data[i][0] is the timestamp and a.data[i][26] is the count.

for (i = 0; i < a.data.length; i++){
    // counts is the count of radiation over the last timeframe
    var counts = 0;
    // t1 is the start time 
    // t2 is the current iteration time
    var t1, t2 = a.data[i][0];
    while ((t2 - t1) < 1000){
        t2 = a.data[i][0];
        counts += a.data[i][26];
        i++;
    }
    // Geiger Data is an array of { x:(time), y:(value)} datapoints.
    GeigerData.push({x: (t1/1000), y: counts});
}

1 Answer 1

2

You problem stems from this line:

 var t1, t2 = a.data[i][0];

Defining JS variables doesn't work like that, and in your code t1 is always undefined. What you really want is

 var t1 = a.data[i][0];
 var t2 = t1;
Sign up to request clarification or add additional context in comments.

2 Comments

This could also be done var t1 = t2 = a.data[i][0]
@JonathanCrowe - technically, yes, you could do that, but you super don't want to. Your code is the same as doing this: var t1 = a.data[i][0]; t2 = t1; This puts t2 in the global scope, by not using var. See this fiddle: jsfiddle.net/ucyewprL

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.