DESARROLLO WEB EN ENTORNO SERVIDOR
Inserción de código en páginas Web
JAVASCRIPT
- 1. Introducción
- 2. Declaración de variables y constantes
- 3. Tipos de datos simples
- 4. Tipos de datos compuestos
- 5. Valores vs Referencias
- 6. Operaciones frecuentes con arrays
- 7. Operaciones frecuentes con objetos
En este tema necesitaras consultar los recursos que aparecen a continuación para entender los Arrays, Objetos y Arrow functions, requisito imprescindible para trabajar en NodeJS y Javascript:
Important
Los apartados que aparecen a continuación son un resumen muy breve del contenido de los enlaces anteriores y no es suficiente para entender con cierta profundidad el lenguaje Javascript, por lo que se recomienda encarecidamente la consulta de dichos enlaces.
let a; // Valor inicial undefined, tipo undefined
const b = 0; // Obligatorio asignar un valor inicial a = true;
typeof a; // booleana = 23;
typeof a; // number
a = 23.01;
typeof a; // number Conversión de número a string
let a = 4.095001;
a.toString();Redondeo a 2 decimales
let a = 4.095001;
+a.toFixed(2); // Redondeo a 2 decimales a = "hola mundo";
typeof a; // stringConversión de número a string
let a = 4.095001';
a.toFixed(2); // Redondeo a 2 decimales const array = [ 1, 2, 3 ];const objeto = { nombre: 'Juan', edad: 20 };- Los datos simples (number, string, boolean) son tratados como valores.
- Los datos compuestos (arrays, objetos) son tratados como referencias.
Las operaciones más frecuentes con arrays son las siguientes:
// Crea nueva referencia y asigna memoria dinámica
const array = [ 1, 2, 3, 4, 5 ]Un elemento al final
const array = [ 1, 2, 3, 4, 5 ]
array.push(6) // [ 1, 2, 3, 4, 5, 6 ]Uno o varios elementos en cualquier posición
const array = [ 1, 2, 3 ]
// en pos 0 sustituimos 0 elementos por 9
const sus = array.splice(0, 0, 9) // sus = [], array = [ 9, 1, 2, 3 ]const array = [ 1, 2, 3 ]
// en pos 1 sustituimos 0 elementos por 9, 8, 7
const sus = array.splice(1, 0, 9, 8, 7) // sus = [], array = [ 1, 9, 8, 7, 2, 3 ]Un elemento al final
const array = [ 1, 2, 3, 4, 5 ]
const num = array.pop() // num = 5, array = [ 1, 2, 3, 4 ]Uno o varios elementos en cualquier posición
const array = [ 1, 2, 3, 4, 5 ]
// en pos 0 extraemos 1 elemento
const ex = array.splice(0, 1) // ex = [1], array = [ 2, 3, 4, 5 ]const array = [ 1, 2, 3, 4, 5 ]
// en pos 1 extraemos 3 elementos
const ex = array.splice(1, 3) // ex = [2, 3, 4], array = [ 1, 5 ]const array = [ 1, 2, 3, 4, 5 ]
// Deja un hueco
delete array[1] // [ 1, <1 empty item>, 3, 4, 5 ]Uno o varios elementos en cualquier posición
const array = [ 1, 2, 3, 4, 5 ]
// en pos 0 sustituimos 1 elemento por 9
array.splice(0, 1, 9) // array = [ 9, 2, 3, 4, 5 ]const array = [ 1, 2, 3, 4, 5 ]
// en pos 0 sustituimos 1 elemento por 9, 8, 7
const sus = array.splice(0, 1, 9, 8 , 7) // sus = [1], array = [ 9, 8, 7, 2, 3, 4, 5 ]const array = [ 1, 2, 3, 4, 5 ]
// en pos 1 sustituimos 3 elementos por 9, 8, 7
const sus = array.splice(1, 3, 9, 8, 7) // sus = [2, 3, 4], array = [ 1, 9, 8, 7, 5 ]const numeros = [ 1, 2, [3, 4], [5, 6] ]
const copia_superficial = [ ...numeros ]
const copia_profunda1 = JSON.parse(JSON.stringify(numeros))
const copia_profunda2 = structuredClone(numeros);
// Test
copia_superficial[2][0] = 9 // numeros = [ 1, 2, [ 9, 4 ], [ 5, 6 ] ]
copia_profunda1[2][1] = 9 // numeros = [ 1, 2, [ 9, 4 ], [ 5, 6 ] ]
copia_profunda2[2][1] = 9 // numeros = [ 1, 2, [ 9, 4 ], [ 5, 6 ] ]const array = [ 1, 2, 3, 4, 5 ]
const nuevoArray1 = a.slice(1) // [ 2, 3, 4, 5 ]
const nuevoArray2 = a.slice(-2) // [ 4, 5 ]
const nuevoArray3 = a.slice(0,3) // [ 1, 2, 3 ]🤔 Observa el uso de una función flecha como argumento de otra función
const array = [ 1, 2, 3, 4, 5 ]
array.forEach( item => console.log (item) )
array.forEach( (item, pos) => console.log (pos, item) )const array = [ 1, 2, 3, 4, 5 ]
const nuevoArray1 = array.map( item => item * 2 ) // nuevoArray1 = [ 2, 4, 6, 8, 10 ]
const nuevoArray2 = array.map( (item, pos) => item * pos ) // nuevoArray2 = [ 0, 2, 6, 12, 20 ]🤔 Observa el uso de una función flecha como argumento de otra función
const array = [ 1, 2, 3, 4, 5 ]
const nuevoArray1 = array.filter( item => item % 2 ) // nuevoArray1 = [ 1, 3, 5 ] // números impares
const nuevoArray2 = array.filter( item => !(item % 2) ) // nuevoArray2 = [ 2 , 4 ] // números pares
const nuevoArray3 = array.filter( (item, pos) => pos==1 || pos==4 ) // nuevoArray3 = [2, 5] // posiciones 1 y 4🤔 Observa el uso de una función flecha como argumento de otra función
const array = [ 1, 2, 3, 4, 5 ]
const num1 = array.find( item => item % 2 ) // num1 = 1 // el primer número impar
const num2 = array.find( item => !(item % 2) ) // num2 = 2 // el primer número par
const num3 = array.find( (item, pos) => pos == 4 ) // num3 = 5 //posición 4🤔 Observa el uso de una función flecha como argumento de otra función
const array = [ 2, 20, 2, 1, 10, 1, 100 ];
array.sort(); // [1, 1, 10, 100, 2, 2, 20]
array.sort( (a, b) => a - b ); // [1, 1, 2, 2, 10, 20, 100]
const nuevoArray = array.toSorted( (a, b) => a - b ); // No modifica array original
const ciudades = [ "Ávila", "Almeria", "Albacete", "Álava" ]
ciudades.sort() // [ 'Albacete', 'Almeria', 'Álava', 'Ávila' ]
ciudades.sort( (a,b) => a.localeCompare(b) ) // [ 'Álava', 'Albacete', 'Almeria', 'Ávila' ]
const nuevasCiudades = ciudades.toSorted( (a, b) => a.localeCompare(b) ) // No modifica array originalEjemplos de filtrado, ordenación y mapeo con métodos encadenados
const nombres = ["Ángel", "Anabel", "Eva", "Ana", "elena", "David" ]
const resultado = nombres
.filter( nombre => nombre.length > 4 )
.sort( (a, b) => a.localeCompare(b) )
.map( nombre => nombre.toUpperCase() )
const nums = [-10, 5, -3, 8, -7]
const resultado = nums
.map(num => Math.abs(num))
.sort((a, b) => a - b)
const jugadores = [
{ nombre: "Alicia", score: 4 },
{ nombre: "Roberto", score: 7 },
{ nombre: "Carlos", score: 9 },
{ nombre: "David", score: 3 }
]
const resultado = jugadores
.filter(jugador => jugador.score > 5)
.map(jugador => jugador.nombre)
.sort( (a, b) => a.localeCompare(b) ) 🧐
Los siguientes métodos NO modifican el array original
map,filter,find,toSortedEl siguiente método SÍ modifica el array original
sort
Las operaciones más frecuentes con objetos son las siguientes:
// Crea nueva referencia y asigna memoria dinámica
const persona = { nombre: 'Juan', edad: 20 }const persona = { nombre: 'Juan', edad: 20 }
persona.casado = false // persona = { nombre: 'Juan', edad: 20, casado: false }const persona = { nombre: 'Juan', edad: 20 }
// Crea nueva referencia y asigna memoria dinámica
persona = { ...persona, casado: false } // persona = { nombre: 'Juan', edad: 20, casado: false }const persona = { nombre: 'Juan', edad: 20 }
delete persona.edad // persona = { nombre: 'Juan' }const persona = { nombre: 'Juan', edad: 20 }
persona.edad = 21 // persona = { nombre: 'Juan', edad: 21 }const persona = { nombre: 'Juan', edad: 20 }
// Crea nueva referencia y asigna memoria dinámica
persona = { ...persona, edad: 21 } // persona = { nombre: 'Juan', edad: 21 }const persona = { edad: 11, direccion: {calle: "nueva", num: 1} }
const copia_superficial = { ...persona }
const copia_profunda1 = JSON.parse(JSON.stringify(persona))
const copia_profunda2 = structuredClone(persona);
// Test
copia_superficial.direccion.num = 99 // persona = { edad: 11, direccion: {calle: "nueva", num: 99} }
copia_profunda1.direccion.num = 88 // persona = { edad: 11, direccion: {calle: "nueva", num: 99} }
copia_profunda2.direccion.num = 88 // persona = { edad: 11, direccion: {calle: "nueva", num: 99} }