Clase 5 - Métodos de arreglo y string
Arreglos
// Longitud = 5[22, 11, 0, 3, 7];// 0 1 2 3 4
const footballPlayers = [ 'Messi', `Alvarez`, 'Martinez', 'Romero', 2, Symbol(), { a: 'foo' },];
console.log(footballPlayers[3]); // Romeroconsole.log(footballPlayers.length); // 4Métodos de Array
- Formas de crear un Array en JavaScript
new Array(3); // arreglo vacío de tamaño 3new Array(3, 4, 5, 5)[(3, 4, 6)];at(index)
- Devuelve el elemento en la posición indicada
const numbers = [1, 2, 3, 4];numbers.at(1); // 2
numbers.at(-1); // 4with(index, value)
- Sirve para cambiar el valor de un índice dado
- Devuelve el nuevo arreglo con el elemento reemplazado
- NO modifica el arreglo original
const numbers = [1, 2, 3, 4];numbers[1] = 22;
numbers.with(1, 22); // [1, 22, 3, 4]push(el1, el2, …)
- Añade uno o varios elementos al final del array
- Me devuelve la nueva longitud del array
- SI Modifica arreglo original
const numbers = [1, 1, 3, 5];console.log(numbers.push(555)); // 5console.log(numbers); // [1,1,3,5,555]pop()
- Elimina el último elemento del array
- Me devuelve el elemento eliminado
- SI Modifica arreglo original
const numbers = [1, 1, 3, 9];console.log(numbers.pop()); // 9 y [1, 1, 3]unshift(el1, el2, …)
- Añade uno o varios elementos al comienzo del array
- Me devuelve la nueva longitud del array
- SI Modifica arreglo original
const numbers = [1, 1, 3, 5];console.log(numbers.unshift(555, 444)); // 6console.log(numbers); // [555, 444, 1, 1, 3, 5]shift()
- Elimina el primer elemento del array
- me devuelve el elemento eliminado
- SI Modifica arreglo original
const numbers = [12, 1, 3, 9];console.log(numbers.shift()); // 12slice(start, end)
- Devuelve los elementos desde la posición inicial hasta la final(opcional) SIN INCLUIR
- Puede usar números negativos, cuenta desde la derecha
- Si pongo un numero gigante toma hasta el final .length
- NO modifica el arreglo original
const numbers = [1, 2, 3, 4];numbers.slice(1, 2); // [2]numbers.slice(0, 3); // [1, 2, 3]numbers.slice(-2); // [3, 4]splice(start, deleteCount, item1, itemN)
- Cambia el contenido de un array eliminando elementos existentes y/o agregando nuevos elementos.
- Si se omite el deleteCount borra todo desde el comienzo
- me devuelve un array con los elementos eliminados
- SI Modifica arreglo original
const numbers = [1, 2, 3, 4];numbers.splice(1, 1); // [2]numbers.splice(0); // [1, 2, 3, 4]console.log(numbers); // []
numbers.splice(1, 1, 555);console.log(numbers); // [1,555,3,4]
numbers.splice(1, 1, 555, 333);console.log(numbers); // [1,555,333,3,4]toSpliced(start, deleteCount, item1, itemN)
- Hace lo mismo al
splicesolo que NO modifica el arreglo original - Devuelve el nuevo arreglo con los valores modificados
const numbers = [1, 2, 3, 4];numbers.toSpliced(1, 1, 555, 333);console.log(numbers); // [1, 2, 3, 4]sort(compareFunction)
- Ordena los elementos de un array modificando el original.
- Si no se pasa
compareFunction, ordena como strings (ej. [10, 2] → [10, 2]).
const numbers = [3, 1, 4, 2];numbers.sort(); // [1, 2, 3, 4]console.log(numbers); // [1, 2, 3, 4] (modificado)
numbers.sort((a, b) => b - a); // [4, 3, 2, 1] (orden descendente)compareFunction:- Devuelve un número negativo si
adebe ir antes queb(no cambia el orden). - Devuelve 0 si
aybson iguales (se mantienen en la misma posición). - Devuelve un número positivo si
adebe ir después queb(se intercambian).
- Devuelve un número negativo si
const numbers = [10, 5, 8, 1];numbers.sort((a, b) => a - b);console.log(numbers);
const fruits = ['banana', 'apple', 'cherry'];words.sort();console.log(fruits);
// si quisieramos ignorar mayusculas y minusculasconst words = ['Banana', 'apple', 'cherry'];words.sort((a, b) => a.localeCompare(b));console.log(words);
words.sort((a, b) => b.localeCompare(a));console.log(words);
words.sort((a, b) => { const strA = a.toLowerCase(); const strB = b.toLowerCase();
if (strA > strB) { return 1; } if (strA < strB) { return -1; } return 0;});console.log(words);toSorted(compareFunction)
- Hace lo mismo que
sort(), pero NO modifica el original.
const numbers = [3, 1, 4, 2];const sortedNumbers = numbers.toSorted();console.log(sortedNumbers); // [1, 2, 3, 4]console.log(numbers); // [3, 1, 4, 2] (sin modificar)findIndex(callback) o findLastIndex(callback)
- Retorna el índice del primer (o último) elemento que cumpla la condición.
- Devuelve
-1si no encuentra coincidencias.
const numbers = [10, 20, 30, 40];numbers.findIndex((num) => num > 25); // 2numbers.findLastIndex((num) => num > 25); // 3find(callback) o findLast(callback)
- Retorna el primer (o último) elemento que cumpla la condición.
const numbers = [10, 20, 30, 40];numbers.find((num) => num > 25); // 30numbers.findLast((num) => num > 25); // 40every(callback)
- Devuelve
truesi todos los elementos cumplen la condición, sinofalse.
const numbers = [2, 4, 6, 8];numbers.every((num) => num % 2 === 0); // truenumbers.every((num) => num > 5); // falsesome(callback)
- Devuelve
truesi al menos uno cumple la condición, sinofalse.
const numbers = [2, 3, 6, 8];numbers.some((num) => num % 2 === 0); // true (hay números pares)numbers.some((num) => num > 10); // falseforEach(callback)
- Ejecuta la función para cada elemento, pero no retorna nada.
const numbers = [1, 2, 3];numbers.forEach((num) => console.log(num * 2)); // 2, 4, 6
// Apliquemos un descuento del 10%let prices = [100, 250, 450, 60, 150];
prices.forEach((price, index, arr) => { arr[index] = price * 0.9;});console.log(prices); // [90, 225, 405, 54, 135]
// Creemos un arreglo de números elevados al cuadradolet numbers = [1, 2, 3, 4, 5];let squaredNumbers = [];
numbers.forEach((number) => { squaredNumbers.push(number ** 2);});console.log(squaredNumbers); // [1, 4, 9, 16, 25]map(callback)
- Retorna un nuevo array con los valores modificados.
- NO modifica el arreglo original
const numbers = [1, 2, 3];const doubled = numbers.map((num) => num * 2);console.log(doubled); // [2, 4, 6]console.log(numbers); // [1, 2, 3]
// Creo un arreglo de string que digan "Indice[index]: valor"let numbers = [10, 20, 30, 40, 50];let stringArray = numbers.map((number, index) => `Indice[${index}]: ${number}`);
console.log(stringArray); // [ 'Indice[0]: 10', 'Indice[1]: 20', 'Indice[2]: 30', 'Indice[3]: 40', 'Indice[4]: 50' ]filter(callback)
- Retorna un nuevo array con los elementos que cumplen la condición.
- NO modifica el arreglo original
const numbers = [1, 2, 3, 4, 5];const evens = numbers.filter((num) => num % 2 === 0);console.log(evens); // [2, 4]console.log(numbers); // [1, 2, 3, 4, 5]reduce(callback, initialValue) o reduceRight(callback, initialValue)
- Reduce el array a un único valor aplicando la función acumuladora.
const numbers = [1, 2, 3, 4];const sum = numbers.reduce((acc, num) => acc + num, 0); // 10
const reversedConcat = numbers.reduceRight((acc, num) => acc + num, ''); // "4321"
// Encontrar el valor máximo del arreglolet numbers = [5, 10, 315, 20, 2345];
let maxNumber = numbers.reduce((max, num) => { if (num > max) { return num; } else { return max; }}, numbers[0]);
// O de manera mucho más simplificadalet maxNumber = numbers.reduce( (max, num) => (num > max ? num : max), numbers[0]);
console.log(maxNumber); // 25
// Calcular el promediofunction calculateAverage(numbers) { let totalSum = numbers.reduce((accumulator, num) => accumulator + num, 0); let average = totalSum / numbers.length; return average;}
let numbers = [5, 10, 15, 20, 25];let average = calculateAverage(numbers);
console.log(average); // 15Métodos de String
- Si bien un string es un primitivo, JavaScript crea un objeto temporal String con el valor del primitivo para trabajarlo con métodos y luego elimina este objeto temporal
split(separator, optionalLimit)
- El método
split()divide el string en un arreglo de strings.
let sentence = 'Hello world, this is JavaScript';
let wordsArray = sentence.split(' ');
console.log(wordsArray); // ["Hello", "world,", "this", "is", "JavaScript"]join()
- Une los elementos de un arreglo en un string.
let wordsArray = ['Hello', 'world,', 'this', 'is', 'JavaScript'];let sentence = wordsArray.join(' ');console.log(sentence); // "Hello world, this is JavaScript"replace(pattern, replacement)
- Devuelve un nuevo string cambiando la/las coincidencias del
patternque tengamos por elreplacement. - El
replacementpuede ser un string o una RegExp
let sentence = 'I am learning JavaScript';let updatedSentence = sentence.replace('JavaScript', 'TypeScript');console.log(updatedSentence); // "I am learning TypeScript"
let sentence = 'The cat is on the cat tree';let updatedSentence = sentence.replace(/cat/g, 'dog');console.log(updatedSentence); // "The dog is on the dog tree"
let sentence = ' Hello world, this is JavaScript! ';let trimmedSentence = sentence.replace(/^\s+|\s+$/g, '');console.log(trimmedSentence); // "Hello world, this is JavaScript!"replaceAll(pattern, replacement)
- Modifica todas las coincidencias si necesidad de una expresión regular ni el modificador
g
let phoneNumber = '123-456-7890';let cleanNumber = phoneNumber.replaceAll('-', '');console.log(cleanNumber); // "1234567890"
// Incluso podemos concatenar métodoslet sentence = 'Hello, world. This is, JavaScript.';let updatedSentence = sentence.replaceAll(',', ' ').replaceAll('.', ' ');console.log(updatedSentence); // "Hello world This is JavaScript "Ejercicios
Ejercicio 1
Haga una función que elimine el primer elemento del arreglo.
Ejercicio 2
Haga una función que solo reciba arreglos con más de 5 elementos y luego elimine los últimos 3. En caso de recibir un arreglo de menos de 5 elementos, mostrar en pantalla un mensaje de error.
Ejercicio 3
Haga una función que reciba un arreglo y un número. Tenemos que sumarle dicho número a cada elemento del arreglo y devolver el arreglo modificado.
Ejercicio 4
Haga una función que reciba un número y devuelva un arreglo que tenga el tamaño del número recibido.
El contenido del arreglo deben ser números desde el 1 hasta el número recibido. (1 a n)
Ejercicio 5
Hay un arreglo con varios números donde todos son iguales excepto uno. Haga una función que encuentre qué número es el distinto.
findUniq([1,1,1,1,1,2,1,1,1]) # return (2)Ejercicio 6
Dado un arreglo de números enteros, encuentre y devuelva el valor de la menor suma posible entre ellos.
minSum([7,4,2,3]) # return (5)Ejercicio 7
Dado un arreglo de números enteros, encuentre el mayor producto posible entre dos números adyacentes y devuelva el valor de dicho producto.
adjacentElementsProduct([9,5,10,2,24,-1]) # return (50)# 5 * 10 = 50Ejercicio 8
Tenemos un grupo de ovejas amenazadas por un lobo y necesitamos saber a cuál se está por comer.
Consideramos que tenemos a las ovejas y al lobo en un arreglo y que en ese mismo consideramos al último elemento como el primero.
Consideración: El lobo solo puede comer a la oveja que tiene a su derecha.
warnTheSheep(["sheep", "sheep", "sheep", "wolf", "sheep"])# "Hey! Oveja numero 1! El lobo esta cerca!"
warnTheSheep(["sheep", "sheep", "sheep", "wolf"])# "No sigas comiendo ovejas!"