Tenho o array [“C”,“B”,“A”,“B”,“B”,“B”,"C,“A”,“B”,“A”];
Preciso que retorne o caractere B
function eleicao(votos) {
var eleito;
for (var i = 0; i < votos.length; i++){
}
return eleito;
}
Tenho o array [“C”,“B”,“A”,“B”,“B”,“B”,"C,“A”,“B”,“A”];
Preciso que retorne o caractere B
function eleicao(votos) {
var eleito;
for (var i = 0; i < votos.length; i++){
}
return eleito;
}
Basta usar um objeto que mantém a contagem de cada elemento, e a cada iteração você verifica se a contagem dele é a maior, e vai atualizando os valores do mais votado de acordo:
function eleicao(votos) {
var cont = {}; // contador de cada um dos elementos
var maisVotado = votos[0];
var maiorQtdVotos = 1;
for (var i = 0; i < votos.length; i++) {
var voto = votos[i];
if (!cont[voto]) { // se ainda não tem voto, marca 1
cont[voto] = 1
} else { // se já tem votos, incrementa 1
cont[voto]++;
}
// se tem mais votos que o maior até o momento, atualiza o mais votado
if (cont[voto] > maiorQtdVotos) {
maisVotado = voto;
maiorQtdVotos = cont[voto];
}
}
return maisVotado;
}
var votos = ["C", "B", "A", "B", "B", "B", "C", "A", "B", "A"];
console.log(eleicao(votos)); // B
Isso funciona se só tiver um elemento mais votado. Mas em caso de empate, você teria que primeiro ver qual é o maior número de votos, e depois percorrer o contador e só mostrar os que tem aquela quantidade de votos:
function eleicao(votos) {
var cont = {};
for (var i = 0; i < votos.length; i++) {
var voto = votos[i];
if (!cont[voto]) { // se ainda não tem voto, marca 1
cont[voto] = 1
} else { // se já tem votos, incrementa 1
cont[voto]++;
}
}
// encontrar a maior quantidade de votos
let max = Math.max.apply(null, Object.values(cont));
// encontrar todos os valores que tem "max" votos
var maisVotados = [];
for (const n of Object.keys(cont)) {
if (cont[n] == max)
maisVotados.push(n);
}
return maisVotados;
}
var votos = ["C", "B", "A", "C", "A", "B", "C", "B"];
console.log(eleicao(votos)); // [ 'C', 'B' ]
Só que agora a função retorna um array contendo todos os mais votados (no exemplo acima, retorna ['C', 'B']
, já que houve empate entre “B” e “C”).