1

Lets say, in a for loop, i am accessing 2 indexes of an array say x and x+1, and comparing those two things to find out how often the numbers of the array increase or decrease.

Is it more/less/equally efficient to have a variable outside of the loop that i reassign each loop, or simply just access it by index inside the loop?

Such as

  let count = 0;

  
  let previousNum = data[0];

  for (let i = 1; i < data.length; i++) {
    const currentNum = data[i];


    if (currentNum > previousNum) {
      count++;
    }

    previousNum = currentNum;
  }

versus

  let count = 0;

  for (let i = 1; i < d.length; i++) {
    const firstNum = data[i - 1];
    const secondNum = data[i];

    if (secondNum > firstNum) {
      count++;
    }
  }

Like on a fundamental level, when it is accessing these indexes, is it iterating through the array to reach the value for these indexes or is it accessing them directly? By accessing only one index inside the loop vs 2 am i increasing the efficiency of the code or is it no difference?

ebenito
  • 11
  • 1
  • 1
    Accessing them directly (or nearly so). Will make no difference in 99% of real world situations, this is extremely unlikely to be a bottleneck – CertainPerformance May 07 '22 at 15:01
  • 1
    It is accessing them (more or less) directly. You always need the location in memory. Which you can easily calculate by `pointer/ reference to array (which holds the memory location where the array starts) + i * length of item in array`. By length I mean the number of bits/ bytes occupied by a given datatype. – Mushroomator May 07 '22 at 15:02
  • Accessing an element in array takes constant time i.e., O(1) complexity. – avm May 07 '22 at 15:08
  • @avm - That's often true, but not always true (sparse arrays, etc.). – T.J. Crowder May 07 '22 at 15:11
  • 1
    @T.J.Crowder True. I was aiming at general scenarios but should've specified that. – avm May 07 '22 at 15:47

1 Answers1

3

Like on a fundamental level, when it is accessing these indexes, is it iterating through the array to reach the value for these indexes or is it accessing them directly?

No, it is not. If possible, the JavaScript engine will have a true array in memory it can index into directly (e.g., arrayMemory[baseArrayMemoryAddress + (index * arrayElementSize)]. If not possible (because the array is sparse or similar), it will at least have a better-than-linear means of accessing the array slots.

As to whether in your specific case using previousNum is beneficial, it's extremely unlikely to matter. If you run into a situation where you think it matters, benchmark the two versions of the real code to see.

T.J. Crowder
  • 1,031,962
  • 187
  • 1,923
  • 1,875