JavaScript - Funcion filter devolver datos

 
Vista:
sin imagen de perfil
Val: 28
Ha aumentado su posición en 5 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Funcion filter devolver datos

Publicado por Pedro (18 intervenciones) el 23/03/2024 21:39:00
Buenas tardes.

Tengo un problema al usar la función filter. Cuando le paso los parametros a través del igual, quiero que recoja 3 opciones a la hora de filtrar, pero cuando le paso mas de un parametro deja de funcionar y me devuelve el array completo sin filtrar. Aparte de ello, este mismo filter, quiero imprimirlo por pantalla,. he iterado el array e intentado a través de un innerhtml mostrar los datos en pantalla, pero esto tampoco funciona. Este sería el código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div class="formulario">
        <form action="">
            <input type="text" class="datos" id="name" placeholder="Nombre">
            <input type="text" class="datos" id="origin" placeholder="Origen">
            <input type="text" class="datos" id="destiny" placeholder="Destino">
            <input type="text" class="datos" id="people" placeholder="Personas">
            <input type="date" class="datos" id="dates" placeholder="Fecha">
 
        <button type="button" onclick="recoger()">Mas información</button>
        <button type="button" onclick="filtrado()">Filtrar</button>
 
 
        </form>
 
                    <div>
                    <section id="viajero"></section>
                </div>






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
let arrViaje = [];
 
 
function recoger(){
    let nombre = document.getElementById("name").value.toLowerCase()
    let origen = document.getElementById("origin").value.toLowerCase()
    let destino = document.getElementById("destiny").value.toLowerCase()
    let personas = document.getElementById("people").value.toLowerCase()
    let fechas = document.getElementById("dates").value
 
    let viaje = {
        name : nombre,
        origin: origen,
        destiny: destino,
        people: personas,
        dates: fechas
    }
    console.log(viaje)
 
    arrViaje.push(viaje);
    console.log(arrViaje)
 
}
 
function filtrado(){
    /**Si quito el operador OR el filter funciona pero al pasarle mas de un elemento no filtra*/
    let result = arrViaje.filter((city) => city.destiny.toLowerCase() == 'canarias' || 'galicia' || 'mallorca')
    console.log(result);
}
console.log(filtrado());
 
 
let viajero = document.getElementById("viajero")
 
/**Aquí itero sobre el array , lo recorro para poder imprimirlo despues*/
for(let i = 1; i<filtrado.length; i++){
 
     /**Aquí lo quiero meter en una lista, en el section ya creado en el html que recojo en la linea de arriba, pero esto no hace nada, el filtro se imprime en consola, pero en la pantalla no sale nada*/
    viajero.innerHTML += `<li>${filtrado[i].name}</li>
    <li>${filtrado[i].origin}</li>
    <li>${filtrado[i].destiny}</li>
    <li>${filtrado[i].people}</li>
    <li>${filtrado[i].dates}</li>`
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Funcion filter devolver datos

Publicado por Ivan (118 intervenciones) el 24/03/2024 11:28:54
Hola,

Creo que el problema está en la condición dentro de la función filter. Cuando en un lado de la condición pones
'canarias' || 'galicia' || 'mallorca', se evalua como verdadero y se ejecuta para todos los elementos del Array.

Prueba comparando de forma individual


1
2
3
4
function filtrado() {
    let result = arrViaje.filter((city) => city.destiny.toLowerCase() === 'canarias' || city.destiny.toLowerCase() === 'galicia' || city.destiny.toLowerCase() === 'mallorca');
    console.log(result);
}

Y ya me dices si funciona.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 28
Ha aumentado su posición en 5 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Funcion filter devolver datos

Publicado por Pedro (18 intervenciones) el 24/03/2024 13:25:16
Si muchas gracias, con eso ya me funciona, pero sigo teniendo el problema de lograr que ese array filtrado se vea en mi html. No logro que ka función filtrar se vea en pantalla, solo logro ponerla en consola
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Funcion filter devolver datos

Publicado por Ivan (118 intervenciones) el 24/03/2024 15:08:16
Hola,

bueno eso es porque filtrado() es una función y la llamas directamente en el for sin los paréntesis () y luego iteras con [].

Para que funcione bien yo haria que filtrado() devolviera el array con un return result.

Lo asignas a una variable y entonces recorres el bucle mediante esa variable

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar