2

La función me pide decir cuantas veces encuentra un elemento repetido:

  • tengo entendido que debo hacer un ciclo for y retornar las veces que se repite pero la formula guia no me funciona, algo estoy haciendo mal, espero puedan ayudarme para entenderlo.

  • No se si deba primero convertir todos los datos a strings o asegurarme de hacerlo con toString y despues ahi si hacer ciclo for.

Muchas gracias.

function cuantosRepetidos(array, elemento) {

  // La funcion llamada 'cuantosRepetidos' recibe como argumento un array de arrays llamado 'array' y un string llamado 'elemento'
  // Cada subarray contiene strings.
  // Debe devolver la cantidad de veces que 'elemento' se repite dentro de los subarrays.
  // Ej:
  // cuantosRepetidos([['manzana', 'naranja'],['sandia', 'pera'],['uva', 'manzana']], 'manzana') debe retornar 2
  // ya que 'manzana' se repite 2 veces.
  // Nota: Podes usar for loops anidados.

  // Tu código aca:



var repeticion=0;
for(var i=0;i<array.length;i++){
if(array[i].elemento == elemento){
repeticion++;
}}

return repeticion;


}
BetaM
  • 30,571
  • 7
  • 32
  • 50
andres felipe
  • 229
  • 4
  • 18

2 Answers2

3

Propuesta con base en tu código:

    function contadorElemento (matrizValores, busqueda) {
      let acumulador = 0;
      
      for (let i = 0; i<matrizValores.length; i++) {
        for (let j = 0; j<matrizValores[i].length; j++) {
          if (matrizValores[i][j] === busqueda) {
            acumulador++;
          }
        }
      }
      return acumulador;
    }
    
    let elementos = [
      ['manzana', 'naranja'],
      ['sandia', 'pera'],
      ['uva', 'manzana'],
    ];
    
    console.log(contadorElemento(elementos, 'manzana'));
    console.log(contadorElemento(elementos, 'naranja'));
    console.log(contadorElemento(elementos, 'pera'));

Te faltó considerar que:

Revisa el siguiente ejemplo:

    let elementos = [
      ['manzana', 'naranja'],
      ['sandia', 'pera'],
      ['uva', 'manzana'],
    ];
      
      for (let i = 0; i<elementos.length; i++) {
        for (let j = 0; j<elementos[i].length; j++) {
          console.log(elementos[i][j]);
        }
      }
  • Cuando uses el condicional deberás indicar fila y columna para que así accedas a los valores y puedas comparar si cada uno que obtienes se corresponde o no con el valor deseado
  • Incrementas el contador y lo retornas dentro del contexto de la función

Propuesta de respuesta alterna

  • Iteraciones si vas a realizar, pero puedes lograr prescindir de algunas de ellas
    • Sin embargo el código estaría incompleto con un solo ciclo for
  • Originalmente lo que recibes es una matriz de datos, lo cual puede suponer mas de un ciclo para iterar y acceder a los valores.
    • Puedes entonces declarar otro ciclo for dentro del principal
    • O nos podemos auxiliar de flat, lo cual te ayudarïa a tener un array de un solo nivel con todos los elementos
  • Analicemos que posterior requieres encontrar las coincidencias de los elementos que existan en ese array y que sean iguales al valor que le pasas como segundo argumento a tu función.
    • Puedes utilizar la estructura que llevas al momento con el condicional if y tu acumulador donde la coincidencia exista
    • O puedes utilizar algo mas funcional como filter que nos retornará un vector lleno de los elementos que cumplan la condición dada
  • Ataquemos el último punto, requieres la cantidad de elementos que existen y que son iguales a algo entonces como ya tienes un vector del punto anterior simplemente con que accedas a su propiedad length o si continuas con tu estructura hacer entonces el return del acumulador declarado

Código:

    function contadorElemento (matrizValores, busqueda) {
      let unaLinea = matrizValores.flat();
      return unaLinea.filter(elemento => elemento === busqueda).length;
    }
    
    let elementos = [
      ['manzana', 'naranja'],
      ['sandia', 'pera'],
      ['uva', 'manzana'],
    ];
    
    console.log(contadorElemento(elementos, 'manzana'));
    console.log(contadorElemento(elementos, 'naranja'));
    console.log(contadorElemento(elementos, 'pera'));

Esta solución propuesta va en función de:

  • Tal vez encontrar un camino mas corto
  • No evita el uso de iteraciones pero trata de reducirlas en algún par de oportunidades
BetaM
  • 30,571
  • 7
  • 32
  • 50
0

Hay muchas formas en cómo resolver este problema. Puedes hacer loops, usar flatten y filter, o también puedes usar reduce y filter

Te dejo la de reduce y filter para que tengas otro ejemplo de los que ya an dado

   function cuantosRepetidos(array, elemento) {
       return array.reduce((count, subarr) => subarr.filter((val) => val === elemento).length + count, 0);
   }
Edward Romero
  • 251
  • 1
  • 4