Skip to content

Latest commit

 

History

History
55 lines (41 loc) · 2.57 KB

jssnippets.rst

File metadata and controls

55 lines (41 loc) · 2.57 KB

JS Snippets

In-place

This is some code which removes consequtive duplicates from an array.

function removeDuplicates(a) {

  let i = 0;
  for (j = 1; j < a.length; j++) {
      if (a[i] != a[j]) {
          i++;
          a[i] = a[j];
      }
  }

  return i + 1;

}

How does this work? Say we want to remove duplicates from an array such as [0, 1, 1, 2]. The code above steps through the following.

step   i j (a[i] != a[j]) 0,1,1,2
1 start 0 1 0 != 1 > true 0,1,1,2
end 1 1 a[1] = a[1] 0,1,1,2
2 start 1 2 1 != 1 > false 0,1,1,2
end 1 2 no action 0,1,1,2
3 start 1 3 1 != 2 > true 0,1,1,2
end 2 3 a[2] = a[3] 0,1,2,2
4 start 2 4 2 != - > true 0,1,2,2
end 3 4 a[3] = a[4] 0,1,2

step 1 does seem to be pointles as the original array has the element at index position 1 set to equal the (same!) element at index position 1. Obviously this results in no change to the original array.

step 2 also results in no change. This time the condition in the if clause is not met and so i is not incremented and also no change is made to the array.

step 3 is the first step which results in a change to the array. The if clause evaluates to true so i is incremented by 1 and a[2] (1) is set equal to a[3] (2). So, now the array is [0,1,2,2].

step 4 results in the last element in the array being deleted. The if clause evaluates to true so i is incremented by 1 to equal 3 and then a[3] is set equal to a[4]. However, a[4] does not exist. So, the effect of setting a[3] to a non existant element is that a[3] now ceases to exist ie. a[3], the last element in the array, is removed from the array.

return value There are no more steps as the condition j < a.length is no longer true. The value of i +1 (4) .