Skip to content

Correct result of amount of repeated values of array

I have written this code for detecting repetitive values of an array. But, it shows incorrect results, how to fix it?

  function RepeatedValues(str) {
 let repeatedCount = 0;
 const array = str.split("").slice().sort();

 for(var i = 0; i < array.length - 1; i++) { 
         if(array[i] == array[i + 1]) {
             ++repeatedCount;
             console.log(array[i] + ", " + repeatedCount);
         }
         else {
             repeatedCount = 0;
         }
     }
 
}

Output:

Result

Answer

Firstly, you do not log the result at the right place. Only once the next character has stopped being the same have you found all duplicates (aka. in your else block).

Next, your count starts at 0, so if you want to see r, 2 and you have counted 1 repetition, do repeatedCount + 1.

function RepeatedValues(str) {
  console.log(str)
  let repeatedCount = 0;
  const array = str.split("").slice().sort();

  for (var i = 0; i < array.length - 1; i++) {
    if (array[i] == array[i + 1]) {
      ++repeatedCount;
      continue;
    }

    if (repeatedCount > 0) {
      console.log(array[i] + ", " + (repeatedCount + 1));
    }

    repeatedCount = 0;
  }

  if (repeatedCount > 0) {
    console.log(array[i] + ", " + (repeatedCount + 1));
  }
}

RepeatedValues("bri2ghtwork2")
RepeatedValues("showreel")
RepeatedValues("circumstances")
RepeatedValues("Mississippi")

Note: I have taken the liberty of replacing your else block with a continue in the if block. In my opinion this makes the function easier to understand and ‘flatter’.