Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Return - Encontrar elementos Repetidos en una lista

En la respuesta planteada por el Profesor del ejercicio 9 , de la seccion "es hora de practicar", parecería que siempre me retorna el valor -1:
function encontrarIndiceElemento(lista, elemento) {
for (let i = 0; i < lista.length; i++) {
if (lista[i] === elemento) {
return i; // Si encuentra el elemento, termina la función aquí
}
}
return -1; // Solo se ejecuta si el for termina y no se encontró el elemento
}

Sin embargo creo que la funcion termina hasta que se ejecuta el primer "return" .
Pero que pasaria si la lista tuviera elementos repetidos? solamente encontraria la primera ocurrencia y no las demas.
Como por ejemplo encontrar el elemento 5 de la lista A=[2,5,3,5,9,10].
Mi opcion de solucion seria la siguiente:

function buscarLista(valorBuscado,listaNumeros){
let i = 0;
let indiceLista = listaNumeros.length - 1;

if(listaNumeros.includes(valorBuscado)){
    while(i <= indiceLista){
        if(valorBuscado == listaNumeros[i]){
            console.log(`El valor buscado se encuentra en la posición ${i}`);
        }
        i++;
    }     
} else{
    console.log('-1');
}

}

1 respuesta

Hola, también soy compañera, así que esperemos la respuesta de los docentes. Es cierto que la función que plantearon los profesores devuelve sólo la primera posición cuando el elemento está repetido. Creo que la consigna buscaba practicar cómo encontrar un índice sin complicarse demasiado.
Pero tu idea es muy buena y siempre es útil practicar con casos más complejos. El único inconveniente que le veo a tu función es que mezcla responsabilidades: busca los índices y también muestra los resultados, cuando sería mejor separar esas tareas.
Lo ideal sería tener una función que encuentre y retorne todas las posiciones en un arreglo, y otra función que muestre esos resultados. De este modo, la función que busca cumpliría con el requisito de la consigna (retornar índices) y se podría reutilizar para otras tareas que no sean sólo mostrar los resultados en consola.
Por ejemplo, podría ser algo así:

function encontrarPosiciones(lista, elemento) {
  let posiciones = []; 
  for (let i = 0; i < lista.length; i++) {
    if (lista[i] === elemento) {
      posiciones.push(i);
    }
  }
  return posiciones;
}

function mostrarPosicionesElemento(elemento, posiciones) { 
  if (posiciones.length === 0) {
    console.log(`El elemento '${elemento}' no se encuentra en la lista`);
  } else {
    console.log(`El elemento '${elemento}' se encuentra en las posiciones: ${posiciones.join(', ')}`);
  }
}

let lista = ["rojo", "lila", "azul", "rojo", "rojo"];
let elemento1 = "rojo";     // elemento repetido
let elemento2 = "violeta"; // elemento inexistente

let posiciones1 = encontrarPosiciones(lista, elemento1); 
let posiciones2 = encontrarPosiciones(lista, elemento2); 
mostrarPosicionesElemento(elemento1, posiciones1); 
mostrarPosicionesElemento(elemento2, posiciones2);