1
resposta

Valor repetido em array

Quero criar um algoritmo que me retorne quantas vezes os valores de um array foram repetidos.

Achei um cod em JavaScript, mas estou tendo dúvidas com ele. (https://stackoverflow.com/questions/12749200/how-to-count-array-elements-by-each-element-in-javascript)

array_elements = ["2", "1", "2", "2", "3", "4", "3", "3", "3", "5"];

array_elements.sort();

var current = null;
var cnt = 0;
for (var i = 0; i < array_elements.length; i++) {
    if (array_elements[i] != current) {
        if (cnt > 0) {
            document.write(current + ' comes --> ' + cnt + ' times<br>');
        }
        current = array_elements[i];
        cnt = 1;
    } else {
        cnt++;
    }
}

Dúvida: A variável current, inicializada antes do laço for recebe o valor "nulo", ok. Dentro do primeiro laço for (para correr o array), tem uma condição que diz "se o elemento do array no indice [i] for diferente de current" (aí já tenho uma dúvida. Essa condicional serve para saber se o valor do indice i do array existe? Por exemplo: array[0] = 7: valor existente, diferente de nulo array[5] = : valor inexistente, igual a nulo )

Ainda dentro do primeiro laço condicional e dentro do for, a variável current recebe o elemento do array no índice i.

Por acaso, a variável current, no comando:

if (array_elements[i] != current)

tem o valor nulo ou tem o mesmo valor do array no índice i.

Tenho essa dúvida pois a variável current só recebe um valor após a condição.

Novamente a dúvida: Qual valor está atribuído à variável "current" no momento em que a mesma entra na condicional:

if (array_elements[i] != current)
1 resposta

Olá Giulio, tudo bem com você?

Então vou tentar explicar um pouco melhor o código parte por parte para ver se fica mais claro: Mas antes é preciso lembrar que o array está organizado:

var current = null;
var cnt = 0;

A variável cnt é o acumulador que armazena a quantidade de vezes que um número aparece

A variável current é iniciada com null para não dar conflito com o primeiro valor do array.

E ai temos o primeiro if:

if (array_elements[i] != current)

O objetivo desse if é terminar a contagem do elemento repetido veja que como o array está ordenado se o elemento atual do array ( array_elements[i]) for diferente do elemento atual (current) é porque acabou a quantidade de elementos iguais daquele valor

Essa condição sempre sera verdadeira na primeira execução (qualquer número será diferente de null) e após isso já atribuímos current para o primeiro elemento do array ;)

E ai temos 2 pontos:

Caso o valor seja diferente:

  • Iremos digitar na tela a quantidade de vezes que o elemento apareceu: document.write(current + ' comes --> ' + cnt + ' times<br>');
  • Iremos trocar o elemento atual (current) pelo elemento diferente e mudamos o cnt para 1, pois é a primeira vez que aparece esse elemento diferente

Caso o valor seja igual

  • Aumentamos o cnt em 1 unidade
  • Vamos para o próximo elemento do array

Conseguiu enteder? Qualquer coisa estou a disposição :)

Abraços e Bons Estudos!