let now = new Date(); let desde1970 = new Date(1000 * 60 * 60 * 24 * 365 * 10); let deCadena = new Date("2024-12-01 10:24:30"); let desglosado = new Date(2023, 0, 44, 17, 15, 20); console.log(now); console.log(desde1970); console.log(deCadena); console.log(desglosado); console.log(desglosado.toDateString()); console.log(desglosado.toLocaleString()); console.log(desglosado.toLocaleDateString()); // Todas las fechas de 2024 for(let i=1;i<=365;i++){ console.log(new Date(2024,0,i)); } console.log(now.getFullYear(),now.getMonth(), now.getDate(), now.getHours(),now.getMinutes(),now.getSeconds(), now.getMilliseconds()); console.log(now.getDay(),now.getTime()); let inicio=new Date().getTime(); console.log(inicio) for(let i=0;i<100000000;i++){ let a=2**i; } let fin=new Date().getTime(); console.log(fin) console.log(fin-inicio)
Ejemplo spread y destructuring
// tenemos un array con un nombre y apellido let arr = ["John", "Smith"] // asignación desestructurante // fija firstName = arr[0] // y surname = arr[1] let [firstName, surname] = arr; /* let firstName=arr[0]; let surname=arr[1]; */ console.log(firstName) console.log(surname) console.log(arr) // segundo elemento no es necesario let [nombre, , title] = ["Julius", "Caesar", "Consul", "of the Roman Republic"]; console.log(nombre) console.log(title) let aa = 2; let b = 7; /* let c=a; a=b; b=c; */ // swap de variables usando destructuring [aa, b] = [b, aa] console.log(aa); let user = { name: "John", age: 30 }; // recorrer claves-y-valores con destructuring for (let [key, value] of Object.entries(user)) { console.log(`${key}:${value}`); // name:John, luego age:30 } let [name1, name2, ...rest] = ["Julius", "Caesar", "Consul", "of the Roman Republic"]; console.log(rest); // valores predeterminados let [name = "Guest", apellido = "Anonymous"] = ["Julius"]; let options = { titulo: "Menu", width: 100, height: 200 }; let { width, titulo, height } = options; console.log(titulo) let prueba = { a: 1, b: 2, c: 3, d: 4 }; let { a, ...resto } = prueba; console.log(resto) showMenu(options); showMenu(); function showMenu({ titulo = "Untitled", width = 200, height = 100, items = [] } = {}) { console.log(titulo) }
https://es.javascript.info/destructuring-assignment
https://dev.to/codingnninja/a-simple-guide-to-javascript-destructuring-3o8o
https://davidwalsh.name/spread-operator
https://codeburst.io/a-simple-guide-to-destructuring-and-es6-spread-operator-e02212af5831
Ejercicios
1.- Crear una función InternalTrim que elimine espacios de más DENTRO de una cadena.
InternalTrim(“Hola que tal”)=>”Hola que tal”
2.- Crear una función ToTitleCase que nos ponga la primera letra de cada palabra en mayúsculas
ToTitleCase(“hoLA que TAL”)=>”Hola Que Tal”
Ejemplos funciones iteracción
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 1, 3, 2, 5, 14, 23]; // Orden numérico con función flecha let grandes = nums.filter(check); grandes = nums.filter((item) => item % 2 == 0); console.log(grandes) let doble = nums.map(item => item * 2); console.log(doble) function check(elemento) { return elemento % 2 == 0; } let users = [ { id: 1, name: "Celina" }, { id: 2, name: "David" }, { id: 3, name: "Federico" } ]; let user = users.findIndex(item => item.id == 1); console.log(user); let conA = users.filter(item => item.name.includes("a")); console.log(conA);
Ordenación arrays
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 1, 3, 2, 5, 14, 23]; // Orden numérico con función flecha nums.sort((a, b) => a - b); nums.sort(function(a, b){return a - b;}); console.log(nums); nums.reverse(); console.log(nums); let alumnos=["Pep","Ána","Iu"]; // Orden de cadenas con acentos alumnos.sort((a,b)=>a.localeCompare(b)); console.log(alumnos); // Desordenar nums.sort(()=>0.5-Math.random()); console.log(nums); // Ordenar creando copia let nuevo=nums.toSorted((a, b) => a - b); console.log(nuevo); // Invertir creando copia let inverso=nuevo.toReversed(); console.log(inverso);
Ejemplos array
let fruits = ["Apple", "Orange", "Plum",1,{nombre:"Ana"},[1,2,3]]; console.log(fruits[1]); fruits[1]="Manzana"; console.log(fruits.at(-1)) frutas=fruits; frutas[0]="Pera"; console.log(fruits); let lista=[1,2,3,4,5]; console.log(suma(lista)); console.log(lista); function suma(lista){ for(let i=1;i<lista.length;i++){ lista[0]+=lista[i]; } return lista[0]; } fruits[900]="Cacahuete"; console.log(fruits); fruits.super="Mercadona"; console.log(fruits); for (let valor of fruits){ console.log(valor); } fruits.push("Mandarina"); // Añado un elemento console.log(fruits); let res=fruits.pop(); // Quito un elemento console.log(fruits); console.log(res) fruits.unshift("Aguacate"); console.log(fruits); res=fruits.shift(); console.log(res);
Ejemplos números
let billion = 1e-6; console.log(0xFF); console.log(0b10001); let num=7; console.log(num.toString(16)); console.log(num.toString(2)); console.log(num.toString(7)); let suma=0.1+0.2; console.log(Math.round(suma*100)/100); console.log(suma.toFixed(2)); let j=Number("aa"); console.log(j); console.log(Number.isNaN(j)); console.log(j==NaN); console.log(parseInt('100px')) console.log(Number('100px')) for(let i=0;i<10;i++){ console.log(aleatorio(6,2)); } function aleatorio(max,min=1){ return Math.trunc(Math.random()*(max-min+1))+min; } Math.max(3,5,1,78,4);
Ejercicios objetos
Cread una función a la que le pasemos un número y nos cree un objeto que tenga una propiedad ‘valor’ y el valor el número que le hemos pasado
Cread una función creaUsuario a la que le pasamos un nombre, un email y una ciudad y nos crea un objeto con esas tres propiedades
Cread una función mayor a la que le pasamos dos objetos como los del primer ejercicio y nos devuelve el objeto que tiene mayor valor. ¿Estamos devolviendo una referencia o una copia? Probadlo y decidid que es lo que mejor tenemos que devolver.
Cread una función hayComunes a la que le pasamos dos objetos y nos devuelve true si tienen propiedades compartidas y false si no es así.
Cread una función a la que le pasamos dos objetos y nos crea un objeto nuevo con las propiedades NO COMPARTIDAS de los objetos. Es decir, si el primer objeto tiene de propiedades nombre y edad y el segundo nombre y apellidos nos crea un objeto con las propiedades edad y apellidos. Los valores, los que tengan.
Cread una función masGrande a la que le pasamos dos objetos y nos devuelve el objeto que tenga más propiedades.
Más ejemplos objetos: copias
function makeUser(name, age) { return { name, age, for:5, 7:"hola", "1":"boo", }; } let user = makeUser("John", 30); console.log(user); let user2 = makeUser("Ana", 50); // Si una propiedad existe console.log("name" in user2); console.log("names" in user2); // Recorro todas las propiedades for (clave in user){ console.log(clave,user[clave]) } // Los objetos son referencias let user3=user2; user3.name="Eustaquio"; console.log(user2); // Para copiar un objeto tenemos varias opciones let user4={}; // Usamos assign para copiar valores Object.assign(user4,user); user4.name="Ares"; console.log(user); console.log(user4); let a={ a:1 }; let b={ b:2 }; let c={ c:3, a:6 }; let d={}; Object.assign(d,a,b,c); console.log(d) //{a: 1, b: 2, c: 3} let user5 = { name: "John", sizes: { height: 182, width: 50 } }; // Esto lo usamos para copiar de manera recursiva let clone = structuredClone(user5);
Ejemplos objetos
let user = { // un objeto name: "John", // En la clave "name" se almacena el valor "John" age: 30, // En la clave "age" se almacena el valor 30 age2: 30, // En la clave "age" se almacena el valor 30 }; console.log(user) console.log(user.name) user.apellidos = "Pi"; console.log(user); delete user.age; let prop="apellidos"; console.log(user[prop]); let foo="www"; user[foo]=7; console.log(user); let test={ [foo]:1, [prop]:"Pi", } console.log(test)