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 originalvar arr = [1, 1, 1, 2, 2, 3, 3],
totArr = arr.length,
cad = "", totCad,
cuenta = 0, i, j;
cad += arr[0];
totCad = cad.length;
for(i = 1; i < totArr; i++){
for (j = 0; j < totCad; j++){
if(arr[i] != cad[j] && arr[i] % 2 !== 0){
cuenta++;
}
}
if (cuenta === 1){
cad += ", " + arr[i];
}
totCad = cad.length;
cuenta = 0;
}
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 originali ++ j ++ arr[i] ++ cad[j] ++ cuenta +++++ CUMPLE CON LA CONDICIÓN
1 0 1 1 0 NO (cuenta = 0) - FIN 2DO. BUCLE
2 0 1 1 0 NO (cuenta = 0) - FIN 2DO. BUCLE
3 0 2 1 0 NO (cuenta = 0) - FIN 2DO. BUCLE
4 0 2 1 0 NO (cuenta = 0) - FIN 2DO. BUCLE
5 0 3 1 0 SÍ (cuenta = 1) - FIN 2DO. BUCLE - LO AÑADO A cad
6 0 3 1 0 SÍ (cuenta = 1) - CONTINÚA 2DO. BUCLE
6 1 3 3 1 SÍ (cuenta = 2) - FIN 2DO. BUCLE
Saludos