Lucas Frezzini
Darwing Steven Sánchez Londoño
Gente que le pone el alma <3. Gracias.
Andrés Felipe Lopez gomez
Muy buen aporte gracias
Los métodos find y findIndex consisten en encontrar el primer elemento de un array que cumpla con la condición especificada en la función (callback).
En el caso de find retornará el elemento completo, si cumple con la condición, caso contrario retornará undefined. El método findIndex retornará el índice del elemento encontrado, caso contrario retornará -1.
Estos procedimientos reciben dos argumentos:
this en la función. Si se lo omite, será undefined. Recuerde que this en arrow functions es el objeto global.array.find(function(), thisArg) array.findIndex(function(), thisArg)
La función, que recibe como argumento los métodos find y findIndex, utiliza tres parámetros:
0, y así sucesivamente.array.find(function(element, index, array)) array.findIndex(function(element, index, array))
Diferencia entre la estructura for y los métodos find y findIndex
Los métodos de arrays nos permiten realizar algoritmos con una menor cantidad de líneas que una estructura for, con un resultado igual o parecido.
Por ejemplo, hagamos un algoritmo que devuelva el primer elemento que sea mayor a 40 de un array.
Si utilizamos la estructura for, necesitaremos una variable con el valor undefined e iterar hasta que se cumpla la condición. La palabra reservada break rompe el ciclo repetitivo.
const numbers = [1, 30, 41, 29, 50, 60] let respuesta = undefined for (let i=0; i < numbers.length; i++){ const element = numbers[i] if (element >= 40) { respuesta = element break } } console.log(respuesta) // 41
Si se necesita el índice, en lugar de una variable con el valor de undefined, debería estar un valor de -1. Y también cambiar el valor del elemento por el del índice del for.
Con los métodos find y findIndex, solo debemos establecer la función que indique la condición a cumplir para cada elemento.
const numbers = [1, 30, 41, 29, 50, 60] const respuesta = numbers.find(item => item >= 40) const respuesta2 = numbers.findIndex(item => item >= 40) console.log(respuesta) // 41 console.log(respuesta2) // 2
Recuerda que si los métodos find y findIndex no encuentran EL elemento, devolverán undefined y -1, respectivamente.
const numbers = ["a", "b", "c"] const respuesta = numbers.find(item => item >= 40) const respuesta2 = numbers.findIndex(item => item >= 40) console.log(respuesta) // undefined console.log(respuesta2) // -1
Contribución creada por: Andrés Guano.
Lucas Frezzini
Darwing Steven Sánchez Londoño
Gente que le pone el alma <3. Gracias.
Andrés Felipe Lopez gomez
Muy buen aporte gracias
Lucas Frezzini
Rafael Martínez Rodríguez
Muchas gracias por el aporte
Gustavo Adolfo Perez Ramos
FInd cuando no encuentra un elemento retona: undefine
FindIIndex: cuando no encuentra un elemento retorna: -1
Eduardo Peña Ramos
Es correcto.
Julia Gabriela Nieva Paredes
Sé que probablemente no me van a leer, pero en serio estoy disfrutando mucho este curso. Me agrada mucho el profe, y sus explicaciones son claras, cortas y muy entendibles. Hoy he leído muchas críticas negativas contra Platzi en Twitter, y sinceramente no entiendo porqué. Al final del día, es una empresa que vende cursos. El que los compramos, somos los que decidimos qué hacemos con ese conocimiento, o si nos va a servir. ¿Puedo encontrar este conocimiento en línea y gratis? Seguramente sí. Pero algo que no valoran es la estructuración de los cursos, el idear una ruta que te lleve a aprender poco a poco. Si lo haces por tu cuenta, seguramente también tendrás éxito, pero por lo menos para mí, es muy importante la estructura, la ruta. En fin, nunca paren de aprender.
Oscar David Rodríguez manjarres
x2
Ricardo Castaneda
Por si a alguien le interesa, no se si es la mejor extension de VSCode pero para usar emojis en el codigo, yo he encontrado la que se llama Emojisense v0.9.0
Saludos 😺
Federico Ivan Llano
se puede hacer con la tecla windows mas punto. tecla win + .
Eduardo Peña Ramos
En Mac pulsando la tecla fnsalen los emojis.
Francisco Javier Solis Martinez
En el caso en que el resultado de find sea un objeto (como en el ejercico de la clase) este será una referencia al objeto original dentro del array products. Es decir, si modificamos ese objeto encontrado por find entonces se estaria modificando el objeto original tambien 😪.
Para mantener inmutabilidad, sabiendo que el metodo find lo que se nos va a retornar es un objeto, se puede hacer uso en este caso, al ser un objeto sencillo, el shallow copy 👥 con ayuda del spread operator:
const product = {...products.find(product => product.id === '🍕')};
Recordar que si el objeto tiene nested objects o incluso funciones dentro esto no funcionaría 🤔. Para eso si se tendria que hacer un deep copy 😎.
Markin Piero Pulache Guarniz
buen aporte
Dario Paladines
Y como sabemos si el método es mutable o inmutable al array orginal?
Agustina Corvo
Buenas tardes Dario,
Se puede comprobar haciendo un console.log del array original luego de utilizar el find.
Si lo haces, verás que que el array original se mantuvo igual, por eso decimos que find es un método inmutable.
Saludos!
José Alejandro Vásquez Gonzalez
Un aporte puede ser que si sabemos que elemento queremos encontrar dentro del array y en que posición podemos usar el método de array indexOf que devuelve un número que resulta ser la posición del array del valor, eso si sabemos que valor queremos pero si deseamos encontrar el primer elemento que cumpla una condición como si es mayor que o si tiene cierto parecido conviene más usar findIndex por el hecho de podemos crear un escenario para buscar un elemento en especifico.
Gustavo Adolfo Perez Ramos
Find: retorna el primer elemento que cumple con la condicion
A diferencia de Filter, Find retorna el objeto / elemento directamente y Filter retorna un Array con el / los elementos
Find retorna solo el primer elemento que cumple la condicion
Si no encuentra un elemento que cumple la condificon retorna undefined
Darwing Steven Sánchez Londoño
Interesante el metodo find y findIndex, lo puse juntos:
const products = [ { name: "Pizza", price: 12, id: '🍕' }, { name: "Burger", price: 23, id: '🍔' }, { name: "Hot dog", price: 34, id: '🌭' }, { name: "Hot cakes", price: 355, id: '🥞' }, ]; const rta = products.find(element => element.id === '🍕') console.log('Find: ', rta) /* Find index devuelve el index en que se encuentra el elemento */ const rta2 = products.findIndex(element => element.id === rta.id) console.log('FindIndex: ', rta2)
Luis Donaldo Talavera Covarrubias
Los hot cakes mas caros de mi vida
Tatiana Cordecci
const matrizAnidada = [ [1, 2, 3], [4, [5, 6, [7, 8]], 9], [10, 11, [12, [13, 14]]] ]; function aplanarArray(array, result = []) { for (let i = 0; i < array.length; i++) { element = array[i] if (Array.isArray(element)) { aplanarArray(element, result); } else { result.push(element); } } return result; }; const arrayAplanado = aplanarArray(matrizAnidada); console.log(arrayAplanado); //output: [1, 2, 3, 4, 5, 6,7, 8, 9, 10, 11, 12,13, 14]
Gustavo Adolfo Perez Ramos
FindIndex: retorna el indice del elemento (regresa la posicion del elemento en el array) y que cumpla con la condicion de busqueda al igual que find
Conocimiento gIT
Asi seria otro ejemplo, bueno con un ID con numeros :
const products = [ { name: 'pizza', price: 10, id: 1 }, { name: 'Hotdog', price: 1, id: 2 }, { name: 'Hamburger', price: 15, id: 3 }, { name: 'Chinesse food', price: 100, id: 4 }, ]; const respuesta3 = products.find(item => item.id === 4); console.log('el id del producto es: ', respuesta3);
Angel Vega
Me armé un algoritmo para poder jugar con la constante a buscar, dependiendo de lo que escribas en ella te dirá si existe o no :)
const numbers = [1,30,49,29,10,13] let rta = 'not exist in list'; for (let index = 0; index < numbers.length; index++) { const element = numbers[index]; if (element === 30 ){ rta = element; break; } } const find = 2 console.log('for', rta); let rta2 = 'not exist in list'; const find_searcher = numbers.find(item => item === find); if (find_searcher === find){ console.log('find', find_searcher) }else{ console.log('find', rta2) }
Jefred Bedoya
Diferencias clave: find vs filter
find: Retorna directamente el objeto o elemento que cumple la condición. Si hay varios, solo devuelve el primero que encuentre. Si no halla nada, devuelve undefined.filter: Siempre retorna un array, incluso si solo encuentra un elemento.Búsqueda por posición: findIndex
1).-1.Casos de uso ideales
find: Ideal para buscar elementos únicos mediante un identificador (como un id).findIndex: Útil cuando necesitas saber la ubicación exacta del elemento para realizar operaciones posteriores, como eliminarlo o modificarlo.Rodrigo Ramos Xochiteotzin
¿find es mutable o inmutable? es decir, el elemento que retorna es un nuevo elemento o cambia el array del que proviene?
Agustina Corvo
Buenas tardes,
find es un método inmutable. Lo podés comprobar haciendo un console.log del array original luego de utilizar find. Verás que el array original se mantiene igual.
Saludos!
Tomás Argüello
entonces find() es como reduce()?
Daniel Camacho
find() te retorna la primer coincidencia que cumpla la condicion, reduce() retorna un numero con el acomulado de una operacion
Luis Berenguer
Hay algún método que devueva todos los objetos que cumplan la condición (como item > 40) en lugar de solo el primero?
Aníbal Corral
Te dejo el array de objetos para el ejercicio :)
const products = [ { name: "Pizza", price: 12, id: '🍕' }, { name: "Burger", price: 23, id: '🍔' }, { name: "Hot dog", price: 34, id: '🌭' }, { name: "Hot cakes", price: 355, id: '🥞' }, ];
Resumen
.
El método find() devuelve el primer elemento del array que cumpla con la condición dada o no devuelve undefined si es que no encuentra ningún elemento que cumpla los requisitos pedidos.
.
const array1 = [5, 12, 8, 130, 44]; const found = array1.find(element => element > 10); console.log(found); // expected output: 12
En cambio el método findIndex() es una variante que te devuelve el index o posición donde esta ese primer elemento que encuentra con las características de la condición dada. De no encontrar ninguno devuelve -1 como respuesta del return del método.
const array1 = [5, 12, 8, 130, 44]; const isLargeNumber = (element) => element > 13; console.log(array1.findIndex(isLargeNumber)); // expected output: 3
array.filter, mira este ejemplo:
const cars = [ { name:'Rolls-Royce Boat Tail', price: 28000000 }, { name:'Bugatti La Voiture Noire', price: 18000000 }, { name:'Pagani Zonda HP Barchetta', price: 17500000 }, { name:'Rolls-Royce Sweptail', price: 13000000 }, { name:'Bugatti Centodieci', price: 9000000 }, ]; const filteredCars= cars.filter((car)=>car.price<18000000); console.log('All Cars',cars); console.log('filtered Cars',filteredCars);