Know the string that is most repeated in array

3

Assuming I have an array:

var arr =  ["YB | Yazmn", "PdH | Soul's", "YB | Infx," "PdH | Jvoo!", "YB | FK@2"];

In this array they are just strings, and in my context (what I want to achieve) what is before the | are ' clans ', in this case there are only 2 clans:

  
  • YB

  •   
  • PdH

  •   

As I can tell, with a fixed-length array of 10 values , which is the most repeated clan ?

Without expresiones regulares ? or are they necessary in this case? I'm stuck

Also the clans are added by the same players.

 var clanes = [];
 var b = document.getElementById('registroClan').value;
    clanes.push(b.toString());

  /*  y se me ocurré recorrerlos y ***si coincide*** algun clan con el array ''arr'' se le suma 1 a la variable que se crearía según el clan ingresado.
    */
    for (var i=0; i<arr.length;i++) {


    /* Un problema más es que deberia crear una variable con el nombre del clan, osea si el jugador ingresa el clan llamado 'YB' además de ingresar al array se crearía una variable para así poderle sumar 1 si es que se repite en un futuro.
    */
    variableClan = 0; // <== Solo ilustrativamente, ya que el usuario crearía la variable al introducir su clan y siempre se le asignaria un valor de 0 al comienzo.

    if(arr[i] == clanes[i]) variableClan += 1;

    }
    
asked by Eduardo Sebastian 18.07.2017 в 04:38
source

3 answers

1

Just go through the array and count the references

function contar_clanes(arreglo)
{
  var clanes = {}

  clanes.maximo = undefined
  
  for (var entrada of arreglo)
    {
      var clan = entrada.split('|')[0].trim()
      var conteo = clanes[clan]
      
      if(conteo != undefined)
        {
          clanes[clan] = ++conteo
          
          if (clanes.maximo == undefined 
              || conteo < clanes[clanes.maximo])
            {
              clanes.maximo = clan
            }
        }
      else 
        {
          clanes[clan] = 1
        }
    }
    return clanes
}

var arr =  ["YB | Yazmn", "PdH | Soul's", "YB | Infx", "PdH | Jvoo!", "YB | FK@2"];
console.log(contar_clanes(arr))

Pseudocode

funcion contar_clanes('arreglo')
{

establecer 'clanes' como un nuevo objeto
establecer 'maximo' en 'clanes' como 'indefinido'

para ( cada 'entrada' en 'arreglo')
 {
    extraer 'clan' en el string 'entrada'

    si (existe 'clan' en 'clanes') 
     {
        incrementar el 'conteo' de 'clan' por 1
        si ('maximo' es indefinido 
            o 'conteo' de 'clan' es mayor a 'conteo' de 'maximo')
          {
            establecer 'maximo' como 'clan'
          }
     }
    sino 
      {
        establecer 'conteo' de 'clan' a 1
      }
 }

retornar 'clanes'

}
    
answered by 18.07.2017 в 05:15
1

Saving in a dictionary each clan. If the clan already exists in the dictionary then we add 1 to the value. In the end we looked for which was the key that had more conincidencias.

var arr= ["YB | Yazmn", "PdH | Soul's", "YB | Infx", "PdH | Jvoo!", "YB | FK@2"];

var diccionario = {};
for(var i = 0; i <arr.length; i++)
{
    // eliminamos los espacios en blanco y separamos el resultado por el |
    var clan = arr[i].replace(" ", "").split("|"); 
    
  // verificamos que el clan exista en el diccionario
   if(diccionario[clan[0]] != undefined){
    // como existe, aumentamos el contador del clan en 1
     diccionario[clan[0]] = diccionario[clan[0]] + 1;
   }
  else{
    // como no existe entonces agregamos el clan al diccionario con un valor inicial a 1
    diccionario[clan[0]] = 1;
  }
}


var valorMasAlto = {conincidencias: 0};

// Recoremos cada elemento del diccionario
for(var property in diccionario)
  {
     
    if(valorMasAlto.conincidencias < diccionario[property])
    {
        valorMasAlto.key = property;
        valorMasAlto.conincidencias = diccionario[property];
    }
  }

console.log(valorMasAlto);
    
answered by 20.07.2017 в 02:49
0

Here I have an example of transports, we can count the repeated elements in the array with this code.

var arraytransporte = ['carro','avion','avion'];
    var contador = 0;
    var repetidos = [];
    var total_numeros = arraytransporte.length;

    for (var i = 0; i < total_transporte; i++) {
    for (var j = 0; j < total_transporte; j++) {
    if (parseInt(arraytransporte[i]) == parseInt(arraytransporte[j])) {
                contador++;
            }
        }

 if (contador > 1 && repetidos.indexOf(parseInt(arraytransporte[i])) === -1) {
            repetidos.push(parseInt(arraytransporte[i]));
            result.innerHTML += ("<p>El transporte " + arraytransporte[i] + " se repite " + contador + " veces </p>");
        }
        contador = 0;
    }

    // array con los transportes repetidos
    console.log(repetidos);
}
    
answered by 03.07.2018 в 05:36