Lección 21: Métodos de Arrays (Parte 3) — Búsqueda y Ordenación
🧠 Concepto
Section titled “🧠 Concepto”Continuamos con más métodos de arrays, enfocándonos en búsqueda avanzada, ordenación y manipulación estructural de los datos.
.find() — Encontrar un elemento
Section titled “.find() — Encontrar un elemento”find devuelve el primer elemento que cumple una condición. Si no encuentra, devuelve undefined.
let usuarios = [ { id: 1, nombre: 'Ana' }, { id: 2, nombre: 'Carlos' }, { id: 3, nombre: 'María' }];
let usuario = usuarios.find(function(u) { return u.id === 2;});console.log(usuario); // { id: 2, nombre: 'Carlos' }.findIndex() — Encontrar el índice
Section titled “.findIndex() — Encontrar el índice”findIndex devuelve el índice del primer elemento que cumple la condición. Si no encuentra, devuelve -1.
let edades = [15, 22, 18, 30];let indice = edades.findIndex(function(edad) { return edad === 18;});console.log(indice); // 2.some() — Alguno cumple
Section titled “.some() — Alguno cumple”some devuelve true si al menos un elemento cumple la condición.
let temperaturas = [18, 22, 35, 28];let hayCalor = temperaturas.some(function(t) { return t > 30;});console.log(hayCalor); // true (35 es mayor que 30).every() — Todos cumplen
Section titled “.every() — Todos cumplen”every devuelve true si todos los elementos cumplen la condición.
let notas = [85, 90, 78, 92];let todosAprobados = notas.every(function(n) { return n >= 60;});console.log(todosAprobados); // true.flat() — Aplanar arrays anidados
Section titled “.flat() — Aplanar arrays anidados”flat aplana arrays anidados a un nivel especificado.
let anidado = [1, [2, 3], [4, [5, 6]]];console.log(anidado.flat()); // [1, 2, 3, 4, [5, 6]]console.log(anidado.flat(2)); // [1, 2, 3, 4, 5, 6].flatMap() — Mapear y aplanar
Section titled “.flatMap() — Mapear y aplanar”Combina map() y flat() en un solo paso.
let frases = ['Hola mundo', 'JS es genial'];let palabras = frases.flatMap(function(frase) { return frase.split(' ');});console.log(palabras); // ['Hola', 'mundo', 'JS', 'es', 'genial'].sort() — Ordenar
Section titled “.sort() — Ordenar”sort ordena el array modificándolo. Por defecto ordena como strings:
let numeros = [10, 5, 40, 25, 1000];numeros.sort();console.log(numeros); // [10, 1000, 25, 40, 5] (¡orden lexicográfico!)Para ordenar números correctamente, usa una función comparadora:
numeros.sort(function(a, b) { return a - b; // ascendente});console.log(numeros); // [5, 10, 25, 40, 1000]
// Descendentenumeros.sort(function(a, b) { return b - a;});console.log(numeros); // [1000, 40, 25, 10, 5]💻 Ejemplo
Section titled “💻 Ejemplo”// Catálogo de productoslet productos = [ { nombre: 'Laptop', precio: 25000, stock: 5 }, { nombre: 'Mouse', precio: 500, stock: 20 }, { nombre: 'Monitor', precio: 8000, stock: 3 }, { nombre: 'Teclado', precio: 1200, stock: 15 }];
// find: buscar producto por nombrelet mouse = productos.find(p => p.nombre === 'Mouse');console.log('Mouse encontrado:', mouse);
// some: ¿hay productos con bajo stock?let bajoStock = productos.some(p => p.stock < 5);console.log('¿Hay bajo stock?', bajoStock);
// every: ¿todos tienen precio > 0?let preciosValidos = productos.every(p => p.precio > 0);console.log('Todos los precios válidos:', preciosValidos);
// sort: ordenar por precio ascendentelet porPrecio = [...productos].sort((a, b) => a.precio - b.precio);console.log('Ordenado por precio:');porPrecio.forEach(p => console.log(`${p.nombre}: $${p.precio}`));
// flatMap: extraer todas las palabras de títuloslet titulos = ['Laptop Gamer', 'Mouse RGB', 'Teclado Mecánico'];let palabras = titulos.flatMap(t => t.split(' '));console.log('Palabras:', palabras);📝 Ejercicio
Section titled “📝 Ejercicio”- Crea un archivo
metodos-arrays-3.js. - Declara un array de objetos
personasconnombreyedad. - Usa
.find()para encontrar a la persona con nombre “Carlos”. - Usa
.some()para verificar si hay alguien mayor de 30. - Usa
.every()para verificar si todos son mayores de edad. - Ordena las personas por edad ascendente con
.sort(). - Usa
.flatMap()para obtener un array con todas las letras de los nombres.
let personas = [ { nombre: 'Ana', edad: 25 }, { nombre: 'Carlos', edad: 32 }, { nombre: 'María', edad: 18 }, { nombre: 'Pedro', edad: 40 }];
let carlos = personas.find(p => p.nombre === 'Carlos');console.log('Carlos:', carlos);
let mayorDe30 = personas.some(p => p.edad > 30);console.log('¿Alguien mayor de 30?', mayorDe30);
let todosMayores = personas.every(p => p.edad >= 18);console.log('¿Todos mayores de edad?', todosMayores);
let porEdad = [...personas].sort((a, b) => a.edad - b.edad);console.log('Ordenados por edad:', porEdad);
let letras = personas.flatMap(p => p.nombre.split(''));console.log('Letras:', letras);⚠️ Nota
Section titled “⚠️ Nota”.sort() modifica el array original. Si quieres mantener el original intacto, haz una copia primero con el operador spread ([...array]) o .slice().
let original = [3, 1, 4, 1, 5];let copia = [...original].sort();console.log(original); // [3, 1, 4, 1, 5] (intacto)console.log(copia); // [1, 1, 3, 4, 5] (ordenado)Para ordenar strings alfabéticamente (considerando mayúsculas y tildes):
let palabras = ['ñandú', 'Ángel', 'zorro', 'éxito'];palabras.sort((a, b) => a.localeCompare(b, 'es'));console.log(palabras); // ['Ángel', 'éxito', 'ñandú', 'zorro'].localeCompare() es la forma correcta de ordenar strings en español.