Foros del Web » Programando para Internet » Javascript »

[ayuda]contar elementos array

Estas en el tema de [ayuda]contar elementos array en el foro de Javascript en Foros del Web. Buenos e comenzado a programar y frequento un curso de javascript recien e comenzado y tengo como tarea realizar un codigo que me ayude a ...
  #1 (permalink)  
Antiguo 09/04/2015, 12:14
 
Fecha de Ingreso: abril-2015
Ubicación: Mondovi
Mensajes: 3
Antigüedad: 9 años
Puntos: 0
Pregunta [ayuda]contar elementos array

Buenos e comenzado a programar y frequento un curso de javascript recien e comenzado y tengo como tarea realizar un codigo que me ayude a resolver este problema

var arr=[1,1,1,2,2,3,3]

donde tengo que controlar quales son los elementos repetidos en mi array y mostrar en la pagina el numero de elemto repetido pero que sea impar en este caso uno porque se repite tres veces pero no se de donde comenzar

comenze creando mi array como el del ejemplo de arriba despues con un ciclo for
hago recorrer todo el array pero despues no se que mas hacer
Código PHP:
var arr=[1,1,1,2,2,3,3]
for (
int i 0i<arr.length-1i++); 
espero vuestra ayuda gracias
  #2 (permalink)  
Antiguo 09/04/2015, 13:25
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: [ayuda]contar elementos array

Bienvenido a FDW.

Puedes crear una función en la que, con ayuda de un bucle y de otros dos arrays, recorras al array y, en cada iteración, verifiques si es un número par, luego, verifica si el valor actual en la iteración se encuentra en el array A (de impares) y si no está en el array B (final); de ser así, lo insertas en el array B, caso contrario, en el array A.

Código Javascript:
Ver original
  1. Array.prototype.contarImpRep = function(){
  2.     this.total = this.length;
  3.     this.impares = [];
  4.     this.repetidos = [];
  5.     for (var i = 0; i < this.total; i++){
  6.         if (this[i] % 2 !== 0){
  7.             if (this.impares.indexOf(this[i]) > -1 && this.repetidos.indexOf(this[i]) == -1){
  8.                 this.repetidos.push(this[i]);
  9.             }
  10.             else{
  11.                 this.impares.push(this[i]);
  12.             }
  13.         }
  14.     }
  15.    
  16.     return this.repetidos;
  17. };
  18.  
  19. console.log([1, 1, 1, 2, 2, 3, 3].contarImpRep().join(", ")); //1, 3
  20. console.log([4, 5, 3, 5, 7, 1, 7, 9, 3].contarImpRep().join(", ")); //5, 7, 3

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 09/04/2015, 14:34
 
Fecha de Ingreso: abril-2015
Ubicación: Mondovi
Mensajes: 3
Antigüedad: 9 años
Puntos: 0
Respuesta: [ayuda]contar elementos array

muchas gracias , tu crees que se pueda evitar de usar indexOf o push porque en clase aun no lo emos usado por eso creo que exista una solocuin mas cavernicola y es a esa a la quiero llegar estube buscando y me decian que para confrantar lo elemetos de un array deberia crear dos ciclo for ejempo
Código PHP:
arr = [1,1,1,2,2,3,3]
for(
i=0i<arr.lengthi++){
for (
j=0j<arr.lengthj++){
if(
arr[i] == arr[j])
}

y con eso deberia confrontar cuales son iguales o esto equivocado ? gracias espero su ayuda y disculpen si hago preguntas tontas pero recien estoy conmenzando y me disculpo anticipadamente por mi ignorancia
  #4 (permalink)  
Antiguo 09/04/2015, 16:20
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: [ayuda]contar elementos array

Claro que se puede, solo que yo usaría el segundo bucle para comparar al valor actual de la iteración del primer bucle con una cadena que irá guardando los valores a mostrar y al ser una cadena, ya no habrá necesidad de utilizar el método push.

Código Javascript:
Ver original
  1. var arr = [1, 1, 1, 2, 2, 3, 3],
  2.     totArr = arr.length,
  3.     cad = "", totCad,
  4.     cuenta = 0, i, j;
  5.  
  6. cad += arr[0];
  7. totCad = cad.length;
  8.  
  9. for(i = 1; i < totArr; i++){
  10.     for (j = 0; j < totCad; j++){      
  11.         if(arr[i] != cad[j] && arr[i] % 2 !== 0){
  12.             cuenta++;
  13.         }
  14.     }
  15.     if (cuenta === 1){
  16.         cad += ", " + arr[i];
  17.     }
  18.     totCad = cad.length;
  19.     cuenta = 0;
  20. }
  21.  
  22. console.log(cad); //1, 3

Ahora, la explicación. Primero, declaro al array con sus valores y obtengo el total de elementos que este posee, además, declaro una variable que originalmente contendrá una cadena vacía, asimismo, una variable que almacenará el total de elementos de la cadena, una variable que utilizaré como contador y otras dos variables contadores pero de los bucles.

Antes de empezar a usar los bucles, tomo al primer elemento del array, lo añado a la cadena y actualizo el valor de la variable que contendrá el total de caracteres que posee la cadena. Enseguida, inicio el bucle que recorrerá al array pero desde el segundo elemento ya que previamente he tomado al primero. En cada iteración, usaré un segundo bucle que recorrerá a la cadena y en cada iteración, verifico si el valor actual en la iteración del bucle del array es diferente al valor actual en la iteración del bucle de la cadena y si es impar; de ser así, incremento el valor de la variable contadora cuenta en uno. Al finalizar el bucle, verifico si el valor de la variable contadora es igual a 1; de ser así, añado el valor actual en la iteración del bucle del array a la cadena, antecedido por una coma, luego, actualizo el valor de la variable que contiene el total de caracteres de la cadena y restablezco el valor de la variable contadora a cero.

La razón por la que realizo esa condición anidada en el segundo bucle y luego verifico que la suma solo haya dado uno es porque durante la ejecución del segundo bucle, puede darse el caso de que haya más de un elemento que cumpla con la condición anidada, como en el caso de este ejemplo, que al inicio la cadena ya posee al número 1, luego, en las siguientes dos iteraciones, los dos 1 que siguen, no cumplirán con la condición, al igual que los dos números 2 que continúan en la secuencia, sin embargo, los dos números 3 finales, sí cumplen, entonces, en la primera vez, tomaré al primero de los dos números 3, pero en la segunda ocasión, ya no, pues dado que el segundo 3 también cumple con la condición, la cuenta será mayor a 1 y la idea es no repetir valores en la cadena.

Una explicación enredada gráfica:

Código Secuencias:
Ver original
  1. i  ++  j ++  arr[i]  ++  cad[j]  ++  cuenta  +++++    CUMPLE CON LA CONDICIÓN
  2. 1      0        1          1            0          NO (cuenta = 0) - FIN 2DO. BUCLE
  3. 2      0        1          1            0          NO (cuenta = 0) - FIN 2DO. BUCLE
  4. 3      0        2          1            0          NO (cuenta = 0) - FIN 2DO. BUCLE
  5. 4      0        2          1            0          NO (cuenta = 0) - FIN 2DO. BUCLE
  6. 5      0        3          1            0   SÍ  (cuenta = 1) - FIN 2DO. BUCLE - LO AÑADO A cad
  7. 6      0        3          1            0         SÍ  (cuenta = 1) - CONTINÚA 2DO. BUCLE
  8. 6      1        3          3            1         SÍ  (cuenta = 2) - FIN 2DO. BUCLE

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 10/04/2015, 04:31
 
Fecha de Ingreso: abril-2015
Ubicación: Mondovi
Mensajes: 3
Antigüedad: 9 años
Puntos: 0
Respuesta: [ayuda]contar elementos array

muchas gracias en realidad no era lo que tenia que hacer pero me ayudo si a alguien le interesa si alguien le puede servir comparto el codigo que usè
Código Javascript:
Ver original
  1. var arr = [1,1,2,2,2,2,2,2,2,2,2,2,2];
  2. function dispari(arr,dimensione){
  3.   for(i=0 ;  i< dimensione ; i++){
  4.       //console.log(i);
  5.       cont = 0;
  6.       for(j=0 ; j<dimensione ; j++){
  7.        
  8.  
  9.           if(arr[i] == arr[j]){
  10.               cont++;
  11.           }
  12.          
  13.  
  14.   }
  15. if((cont % 2) != 0 ){
  16.               return arr[i];
  17.           }
  18. }
  19. }
  20.  
  21. var resultado = dispari(arr, arr.length);
  22. console.log(resultado);
  #6 (permalink)  
Antiguo 10/04/2015, 07:53
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 9 años, 9 meses
Puntos: 44
Respuesta: [ayuda]contar elementos array

Acordate de marcar el tema como solucionado! Saludos
  #7 (permalink)  
Antiguo 10/04/2015, 09:15
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: [ayuda]contar elementos array

Creo que debiste de ser más claro en la explicación y decir que te refería por impar al número de repeticiones y no al valor del elemento.

Me pregunto cómo aplicarías lo que hiciste para los casos en los que habrían más números repetidos en cantidades impares si la primera vez que encuentras uno, lo terminas devolviendo y terminando la función.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: elementos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:51.