¡No uses filter, ni find, ni un bucle normal para hacer esto en JavaScript!
Vložit
- čas přidán 15. 12. 2022
- Usa este método para encontrar si un elemento de un Array cumple una condición.
Es la forma correcta de hacerlo, la más corta y fácil de leer y mantener.
¡Así mejorará tu código! 👍 - Věda a technologie
Cada que usas return y llaves en arrow functions con una sola línea muere un pandita bebé 😢
Es para que se explique mejor, no todos conocen como funcionan las arrow functions
usar arrow functions esta mal?
@@Fran-wk1wj depende, de qué pues primero debes entender que no es lo mismo una "function expression" que una "function declaration", busca la diferencia y verás, no es que "esté mal", solo que debes saber el scope que necesitas.
@@Fran-wk1wj pues es que directamente las arrow functions son funciones anonimas a diferencia de las funciones declaradas
Nooooooo!!!! :c
update: el .find seria lo mas directo (sólo si necesitas el objeto), el some te da sólo un boolean, genial.
Eres tonto.
Al principio especifica que el problema está basado en el propio hecho en la pregunta de ¿hay alguna persona mayor de 18 años? cuya respuesta es evidente que tiene que ser condicional.
update: eres tonto.
venia a decir esto
Gracias. enseñame mas
Pero me devuelve todas los values que sean mayor ó igual a , por ej, 17?, me devuelve memxd y milfy con sus values?
pero eso es para saber si hay alguien mayor de 18, pero no te entrega los datos de las personas de mayores de 18 años, entonces para el segundo escenario donde requieres los datos de esas personas para hacer x cosas, no se usa el some, se usaría el filter
No dijo lo contrario
El some es muy útil si necesitas filtrar un array de objetos
Amo esto de la programación 😍😍
Ohh, buena muchas gracias midu por tus contenidos de mucha calidad 👏
Un placer, Jose! Ojalá os ayude! 🤗
😁 some y every. Un videito con diferencias! Siempre tengo que ir a la docu porque no me acuerdo la diferencia je
Some, te devuelve true si algún elemento pasa la condición.
Every, te devuelve true si todos los elementos pasan la condición.
Muy útiles los dos.
Genial. Me ahorraste mucho código
Trucazo. Trucazo. Si señor. 👌
🔥🔥🔥
Me gustaría adquirir un curso de Javascript de este profesor
Que editor de código usas?
con un simple for puedes guardar los encontrados en un array y mostrarlos, es lo mas sencillo, la misma cantidad de lineas de codigo
un filter
y se podria usar el similar en otros lenguajes??
Quiero guardarloo!!!
esto no funcionaria si necesito retornar ese objeto que cumple la condicion? disculpa, pregunto desde mi desconocimiento sobre el método
Wao😮
findIndex es bueno. Si encuentra algo, ya sabes como traer el objecto que necesitas, e imagino que no hay que escribir mucho más que con some.
Para eso simplemente usarías find.
teamo tio
de que sirve saber si un objeto cumple x condición en un arreglo, si casi en la mayoría de los casos necesitas dicho objeto, no si, un objeto de todos los del arreglo cumple X condición...
es como ¿hay alguno que cumpla X condicion? aplicas arr.some(...) si la respuesta es true llegas a la siguiente pregunta ¿quien? que haces en ese caso? claramente filter es la respuesta 🤯
Es obvio que depende de cada situación
Exacto, es dependiendo de la condición, por lo menos me ha tocado saber solo si existe o no una coincidencia para hacer algo en la vista, no para cambiarlo ni usar ese objeto.
a lo que voy, es que son muy pocas ocasiones donde se ocupa some, si es que la he ocupando serian 1 o 2 veces de todo el tiempo que llevo desarrollando, es una funcionalidad súper situacional...
Ya entiendo, igual debe ser útil, en alguna situación especifica
Será en la mayoría de casos donde trabajas. El uso de some/every es bastante extendido y vendría a sustituir muchos usos de los bucles for y continue/break.
Esto no quiere decir que filter no se use. Lo que quiere decir es que no uses filter cuando tienes que usar some.
Graciasssss
3ee como haces el efecto neon?
Tipo el lamda de python? Cierto?
Que tema esta usando?😮
Segun el capture que le pase a la IA me dice que el tema se parece a "Solarized Dark"... verificalo bro
Que tema es ese y como lo pongo ?
Synthwave 84 para vscode.
Alguien sabe cómo se llama el tema que tiene de VScode?
Se me hace que es como find solo que este te devuelve un objeto en cuestión que coincida en lugar de decirte que es true si lo encuentra.
exactamente
Soy extremadamente novato y quiero aprender, así q me surge una duda y espero q no se burlen por lo básica jajajaja como haces para que el console.log se vaya actualizando automáticamente?
Ok pero específicamente en que sentido mejora?
En menos líneas de código o por mejor performance?
Menos código y menos iteraciones, por lo que mejor rendimiento.
@@midudev oh wow, graciasss crack
Pero no nos flipemos, el array hay que recorrerlo si o sí. Some() lo que te ahorra es un break, pero a bajo nivel el rendimiento es muy parecido al for tradicional.
@@xuloIsaias nada de eso, solo mejora porque es la manera que corresponde usar, el some esta para eso. Es absurdo que mejore significativamente el rendimiento por una o dos micro instrucciones menos. Es mas, por simple azar podria hasta empeorar, pero es irrelevante porque es mas legible, correcto y mantenible
@@xuloIsaias PD: este tipo te vende eso del rendimiento pero te aseguro que el some internamente utiliza la interacion
Como hace para que dentro del visual, en la zona de la terminal le retorne la logica de lo que escribe en tiempo real? busque en todas partes y no es :(
No es vscode, es runjs
Como haces para tener la sintaxis asi de colorida?
Es un tema de vscode. Synthwave 84
@@shoe0nh3ad GRACIAAAS
Que bonitos colores de letras ,como se llama ese estilo
Hice un capture y se lo pase a la IA y me dice que el tema se parece a "Solarized Dark"... verificalo
Me encanta el Tema que usas. Me podrás decir cual es? Gracias por el video!
x2
SynthWave '84
Ya te lo han dicho. :)
como se llama la extencion de tu tema del visual ???
Eso no es Code, es RunJS
Su tema creo que es el Synthwave 84
Y si quiero devolver la propiedad y el valor de la propiedad de uno de esos objetos? Y no el objeto completo?
Pues mejor el objeto completo y haces las sgtes validaciones en las sgtes líneas recuerda código fácil de leer también es bueno.
y si son mas de 1
Es exactamente los mismo .. internamente el some hace una iteración con un if dentro. Que pensabás, que lo encontraba magicamente?
Obviamente es magia
No exactamente. El filter iteraría todos los elementos del array. El some pararía la ejecución del código la primera vez que se cumpla la condición y returns true
Claramente, alquimia
es mas facil de leer y punto, saludame a la familia
Tenés mucha falta de compresión.
¿Si lo hago en C, el trabajo es mío?
Para buscarlo no lo hace iterando?
find y some iteran hasta el primero que cumple la condición.
filter itera sobre todos los elementos siempre.
@@midudev ahhh ok. Gracias compa
Para que sea mayor de edad tendría que ser >= 18 (18 ya se considera mayor de edad)
eso en tu pais, en U.S.A para ser mayor de edad se necesita que sea mayor de 21 años xd
@@carlosrivera3910 no aportas nada, obviamente Dani está hablando de un escenario donde la mayoría de edad sea los 18
ufff
Excelente!. Cuáles extensiones usas en vs?
Y para saber cuál es la persona que cumple la condición?
.find
Si en tu array hay 2 midu de 16 años.
Como eliminas el clone de midu? 😊
@Matias Isarrualde show me
Pero y si deseo obtener la data de todos los que cumplen esa condición? Esa función no me parece tan útil
para eso usa find, pero a veces solo te hace falta saber si cumple la condicion
Cuando entiendas que es mejor ser lo más declarativo posible y no tanto las línea de código verás que tienen mucho sentido usar some.
existeMayor === personas.find(...
existeMayor === personas.some(...
Y luego como lo obtengo?
Devuelve el booleano de si lo ha encontrado o no.
@@midudev Excelente! 👌
Yo a fuerza bruta lo haría así
const validarEdad = (input)=>{
let response = false;
input.forEach(persona=>{
if(persona.edad > 18){
response = true;
break;
}
});
return response;
}
De esta manera se evitaría iterar en todos los objetos, la única manera de que iterara en todos los objetos sería que nunca se cumpliera la condición.
Y si con antelación se que podrían existir duplicados convertiría el array en un set para evitar duplicados.
Claro, la fuerza bruta consume más líneas, pero puede tener mejor escalabilidad. Si en un futuro necesito implementar algún callback, se lo paso como argumento. Si requiero los objetos le devuelvo un array. Etcétera
el some itera hasta encontrar el primer elemento que cumpla la condición... no itera sobre todos a menos que ninguno la cumpla o justo el último sea el que la cumpla.
@@KikoMovilla YAGNI
Estoy atorado en un proyecto mio, tengo dos arrays, uno con ingredientes nesesario para una receta, y otro con ingredientes qué tengo en mi casa, solo necesito una manera de comprobar si el arrray con ingredientes en casa cumple con los ingredientes de la receta.
si es true: que muestre imagen de receta posible.
si es false: print "no puedes confinar nada"
Alguna idea porfavor?
He buscado y encontré una manera donde cuenta las palabras repetidas de un array del otro, y si la cantidad de palabras repetidas es igual a la cantidad de *arrayReceta.lenght* entonces mostrar imagen, pero sinceramente no me gusta.
Estoy aprendiendo solo, con ayuda de Internet y me siento impotente de no poder encontrar lo que busco, o crearlo yo mismo.
Te doy vuelta la validación.
Podrías verlo como:
"si alguno de los ingredientes necesarios para la receta
NO está entre los ingredientes disponibles en casa,
NO puedo cocinar la receta"
Un for al primer array, con otro for donde comparas, cada vez que encuentres un ingrediente sumas 1 a un contador, cuando el contador sea igual a arrayIngredientes.lenth, , podrás cocinar, sino te faltan ingredientes, el que no encuentres lo puedes sacar a otro array o sacarlo por consola
¿Alguien mas se dio cuenta que puso "persona" y el const era "personas"?
(se que es mejor para el guion y que capaz no fue error pero jajaj lo tenia que decir)
No es necesario que se ponga return.
Claro que sí, porque estamos usando las llaves.
No estoy usando el return implícito, además, porque en un vídeo tan corto hay gente que no lo entendería.
Sigue siendo O(n), que no?
some igual itera sobre todo los objetos, lo unico es que es mas facil de leer.
No, no itera sobre todos los objetos. Itera hasta que encuentra el primero que cumple la condición.
const n = [1, 2, 3, 4, 5]
n.some(n => {
console.log(n)
return n % 2 === 0
})
En la consola verás:
1
2
Mejor es ```persona => persona.age >= 18```.
Es incluso más legible
@@cesaramirezfr Claro que sí.
creo que las 3 propuestas que mostraste son iguales
porque las 3 tienen complejidad O(n)
A lo sumo tendrás que considerarlo en un caso muy muy puntual, some devuelve un booleano no el objeto, puede ser útil si solo tenes que saber si un objeto de un conjunto cumple la condición o no, en cambio con filter tendrias el overhead al pedo del objeto que trajo + tener que revisar si trajo un objeto con mas lineas de codiho
Por qué no un do while y ya está? XD
O lenguaje ensamblado!
@@midudev ?
@@ElTitoFry ensamblador es de bajo nivel y de codigo bastante largo para hacer una operacion simple, por eso lo compara con tu solucion
@@jorgecortez285 Sé perfectamente lo que es el lenguaje ensamblador, lo que no sé es a lo que viene la comparación cuando un do while es nativo y hace exactamente lo mismo de una manera súper simple y encima te permite gestionar la variable para poder usarla después. La solución que él expone no es útil en caso de necesitar operar con el elemento encontrado.
Hola Midu creo que el return esta demás, pero confirmo que es una maravilla el some y el every
No, el return no está de más. :) Otra cosa es que quitemos las llaves y hagamos el return implícito, que no es el caso.
hay multiples formas de hacer esto, y no necesariamente esta es la mejor.
normalmente hay muchas transformaciones que terminan en las funciones que "reducen" a un boolean, pero nadie te va a sacar puntos por un nivel de optimización tan bajo mientras que no tengas como 10 nested loops
lo digo de experiencia en los peer reviews...
Buf...
en Java a este método se le llama "anyMatch" no entiendo porqué les pareció adecuado llamarlo "some"
no es más útil devolver la persona(s) mayor de 18?
como regresari el nombre de la persona mayor de 18 años
Lo explicaste mal amigo.
El método más adecuado en este caso sería filter, ya que verifica y devuelve un nuevo array con los valores encontrados.
El método some, por otro lado, comprueba si al menos un elemento cumple la condición, devolviendo un valor booleano.
array.find(value => !!(condition));
Pero no sé puede usar el .includes? Nos retorna un booleano.
En este caso no ya que se está buscando en un array de objectos, el includes solo recibe como argumento un valor no una condición
Y si quiero saber quien tiene más de 18?
Para encontrar todos los que son mayores de 18. -> filter.
Para encontrar el primero que es mayor de 18. -> find.
Para saber si todos son mayores de 18. -> every.
Para saber si alguno es mayor de 18. -> some.
@@midudev ok gracias amigo
Esa forma de hablar. modo tiktoker activado XD
const r= (state = [0,1,2,3,4,5], action) => {
switch(action.type) {
case 'REMOVE_ITEM':
return state.filter((_, index) => index !== action.index);
default:
return state;
}
};
The filter() method creates a new array filled with elements that pass a test provided by a function.
The filter() method does not execute the function for empty elements.
The filter() method does not change the original array.
Sin los colores neon no funciona
Efectivamente, es una dependencia de JavaScript.
A ver, quién con sentido común usa la primera alternativa??? Dios mío
Lodash?
No es necesario.
Como odio la palabra bucle
Pero no podria ser
const mayores = personas.filter(persona => persona.age > 18)
Y devolveria un array solo con milfy
esta bueno, es bastante similar al método every aunque la pregunta sería ¿Todas las personas son mayor de edad?
Sería “>=“ , no solo mayor
Eso no me sirve si no me devuelve la data
Esto es en el caso de uso estilo:
Si en esta lista existe una persona mayor de 18 años, este cuadrito se pintara de verde, caso contrario será rojo. Por lo que te sirve el valor booleano, o para seguir una lógica extra de los datos.
En caso de querer usar la data de los ítems filtrados debes usar filter, some solo es para variables booleanos.
Dijeron que el frontend era bonito y me mata el no saber que framework usar puro js nativo estoy usando :'v
De verdad has visto a alguien usar filter para hacer eso? Hace ya bastante tiempo que some es el estándar, y un bucle con break o return (si te estas haciendo tu propia función) también es perfectamente correcto, que a fin de cuentas es lo que hace some internamente, pero hay gente que le gusta reinventar la rueda.
Si hay gente hasta en los comentarios que ya ha dicho que hasta lo prefiere. 😅
@@midudev cuando lo has dicho me he asustado y me he puesto a mirar los comentarios, creo que quienes lo prefieren lo ponen en el contexto de necesitar el objeto en lugar de solo saber si si o si no. Aunque hay algunos comentarios que no tienen precio 😂
Foreach y break en la aparición.. Meh
foreach no permite hacer break, melón
el nombre del método es bastante horrible, realmente significa "any"
Lo mejor es no usar javascript.