Consejos y trucos de Javascript

Yo Quiero Programar #YQP

En el mundo del desarrollo web, el dominio de JavaScript se presenta como un activo inigualable. Este artículo desvela trucos y consejos de JavaScript, revelando estrategias ingeniosas para optimizar el código y potenciar la eficiencia en el desarrollo web. Desde técnicas avanzadas de manipulación de objetos hasta secretos para gestionar eventos de manera eficaz, explicaremos cómo perfeccionar no solo el conocimiento del lenguaje, sino también su aplicación como una herramienta versátil y poderosa en el repertorio del desarrollador. Sumérgete en este recorrido práctico que desbloqueará el potencial completo de JavaScript, llevando tus habilidades de programación a nuevas alturas. ¡Prepárate para descubrir trucos esenciales que transformarán tu enfoque en el fascinante mundo del desarrollo web!

Destructuring con Parameters

El destructuring en JavaScript es una técnica de extracción de datos de arrays o objetos en variables separadas. Esta técnica facilita la manipulación de datos y el acceso a sus elementos.

Aquí tienes un ejemplo de cómo usar el destructuring con parámetros en JavaScript:

// Función que devuelve un objeto con información
function getInfo() {
 return {
    name: 'John',
    age: 30,
    city: 'New York'
 };
}

// Desestructurando el objeto devuelto por la función getInfo()
let { name, age, city } = getInfo();

console.log(name); // Salida: 'John'
console.log(age); // Salida: 30
console.log(city); // Salida: 'New York'

En este ejemplo, la función getInfo() devuelve un objeto con información. Al desestructurar el objeto devuelto por la función, se crean variables (name, age y city) con los valores de las propiedades del objeto. Esto permite acceder fácilmente a los valores de las propiedades del objeto sin tener que referenciar al objeto completo.

Puedes utilizar el destructuring con parámetros en funciones también. Aquí tienes un ejemplo:

// Función que recibe un objeto con información
function showInfo({ name, age, city }) {
 console.log(`Name: ${name}`);
 console.log(`Age: ${age}`);
 console.log(`City: ${city}`);
}

// Llamada a la función showInfo() con un objeto como argumento
showInfo({
 name: 'John',
 age: 30,
 city: 'New York'
});

// Salida:
// Name: John
// Age: 30
// City: New York

En este ejemplo, la función showInfo() recibe un objeto como argumento y desestructura el objeto en parámetros (name, age y city). De esta manera, puedes acceder fácilmente a los valores de las propiedades del objeto en el cuerpo de la función.

Deep Copy with JSON

El deep copy, en inglés ‘copia profunda’, es una técnica de copia de objetos en JavaScript que crea una nueva instancia del objeto original con sus propios valores y referencias. En contraste, el shallow copy, copia superficial, solo copia las referencias de las propiedades del objeto original, lo que puede causar problemas si se modifica el objeto copiado.

En JavaScript, el objeto JSON proporciona un método llamado stringify() que convierte un objeto en una cadena JSON. Luego, se puede utilizar el método parse() para convertir la cadena JSON de nuevo en un objeto. Al convertir el objeto en una cadena JSON y luego en un objeto nuevo, se realiza una copia profunda del objeto original.

Aquí tienes un ejemplo de cómo se puede realizar un deep copy en JavaScript:

// Objeto original
let original = {
 name: 'John',
 age: 30,
 city: 'New York',
 address: {
    street: '123 Main St',
    zip: 10001
 }
};

// Convertir el objeto original en una cadena JSON
let json = JSON.stringify(original);

// Convertir la cadena JSON en un nuevo objeto
let copy = JSON.parse(json);

// Cambiar el valor de una propiedad del objeto copiado
copy.address.street = '456 Second Ave';

console.log(original.address.street); // Salida: '123 Main St'
console.log(copy.address.street); // Salida: '456 Second Ave'

En este ejemplo, el objeto original tiene una propiedad address que a su vez es un objeto. Al realizar un deep copy del objeto original en el objeto copy, se crea una nueva instancia del objeto original con sus propios valores y referencias. Por lo tanto, al cambiar el valor de la propiedad street del objeto address en el objeto copy, el valor de la propiedad street en el objeto original no se ve afectado.

El deep copy en JavaScript es una técnica que permite crear una copia completa e independiente de un objeto original. Se puede realizar un deep copy utilizando el objeto JSON y sus métodos stringify() y parse(). Esto es útil cuando se desea modificar un objeto copiado sin afectar al objeto original.

Valores predeterminados sencillos con OR

Los parámetros de función en JavaScript pueden tener valores predetinados, lo que significa que se les asignará un valor específico si no se pasa ningún argumento al llamar a la función. Esto puede lograrse utilizando el operador de asignación (=) al definir el parámetro. Por ejemplo:

function saludar(nombre = 'invitado') {
  return `Hola, ${nombre}!`;
}

console.log(saludar()); // Salida: 'Hola, invitado!'
console.log(saludar('Juan')); // Salida: 'Hola, Juan!'

En este ejemplo, el parámetro nombre tiene un valor predeterminado de ‘invitado’. Si no se pasa ningún argumento al llamar a la función saludar(), se utilizará el valor predeterminado.

Sin embargo, también es posible utilizar el operador OR (||) para asignar valores predeterminados a las variables o parámetros de función. Si el valor antes del operador OR es falso (por ejemplo, null, undefined, 0, false o una cadena vacía), se utilizará el valor después del operador OR como valor predeterminado.

Aquí hay algunos ejemplos de usar valores predeterminados con OR en JavaScript:

Ejemplo 1: Establecer un valor predeterminado para una variable

let mensaje = '¡Hola, mundo!';
let usuario = null;

let mensajeUsario = usuario || mensaje;
console.log(mensajeUsario); // Salida: '¡Hola, mundo!'

usuario = '';
mensajeUsario = usuario || mensaje;
console.log(mensajeUsario); // Salida: '¡Hola, mundo!'

usuario = 'Juan';
mensajeUsario = usuario || mensaje;
console.log(mensajeUsario); // Salida: 'Juan'

En este ejemplo, la variable mensajeUsario se asigna el valor de usuario si usuario es verdadero (es decir, no es null, undefined, 0, false o una cadena vacía). De lo contrario, mensajeUsario se asigna el valor predeterminado de mensaje.

Ejemplo 2: Usar valores predeterminados con OR en una función

function saludar(usuario = 'invitado') {
  return `Hola, ${usuario}!`;
}

console.log(saludar()); // Salida: 'Hola, invitado!'
console.log(saludar('Juan')); // Salida: 'Hola, Juan!'

En este ejemplo, el parámetro usuario opcional de la función saludar tiene un valor predeterminado de ‘invitado’. Si usuario no se pasa como argumento al llamar a la función, se utilizará el valor predeterminado de ‘invitado’.

Ejemplo 3: Usar OR para establecer valores predeterminados para múltiples variables

let x = null;
let y = 0;
let z = '';

let a = x || 10;
let b = y || 20;
let c = z || '¡Hola!';

console.log(a); // Salida: 10
console.log(b); // Salida: 0

En este ejemplo, el operador OR se utiliza para establecer valores predeterminados para múltiples variables x, y y z. Si el valor de x es falso, se utiliza el valor predeterminado de 10. Si el valor de y es falso, se utiliza el valor predeterminado de 20. Si el valor de z es falso, se utiliza el valor predeterminado de ‘¡Hola!’.

Es importante tener en cuenta que el operador OR puede no comportarse como se espera cuando se utiliza con variables que pueden tener valores verdaderos o falsos. Por ejemplo, si una variable puede tener un valor de 0 o una cadena vacía, usar el operador OR para establecer un valor predeterminado puede no funcionar como se pretende. En tales casos, es mejor usar comprobaciones explícitas o usar el operador typeof para verificar el tipo de la variable antes de establecer un valor predeterminado.

Búsqueda avanzada de matrices

Existen varias formas de realizar búsquedas avanzadas en matrices en JavaScript. A continuación, se presentan algunas de las formas más comunes:

Usar el método filter(): Este método crea un nuevo array con todos los elementos que cumplen con una condición específica. Por ejemplo, si deseas buscar todos los elementos de una matriz que sean mayores que 10, puedes usar el siguiente código:

let numeros = [5, 10, 15, 20, 25];
let mayoresA10 = numeros.filter(numero => numero > 10);
console.log(mayoresA10); // Salida: [15, 20, 25]

Usar el método find(): Este método devuelve el primer elemento de un array que cumple con una condición específica. Por ejemplo, si deseas buscar el primer elemento de una matriz que sea mayor que 10, puedes usar el siguiente código:

let numeros = [5, 10, 15, 20, 25];
let primerMayorA10 = numeros.find(numero => numero > 10);
console.log(primerMayorA10); // Salida: 15
let primerMayorA10 = numeros.find(numero => numero > 10);
console.log(primerMayorA10); // Salida: 15

Usar el método findIndex(): Este método devuelve el índice del primer elemento de un array que cumple con una condición específica. Por ejemplo, si deseas buscar el índice del primer elemento de una matriz que sea mayor que 10, puedes usar el siguiente código:

let numeros = [5, 10, 15, 20, 25];
let indicePrimerMayorA10 = numeros.findIndex(numero => numero > 10);
console.log(indicePrimerMayorA10); // Salida: 2

Usar bucles for o forEach: Si deseas realizar búsquedas avanzadas en una matriz, también puedes usar bucles for o forEach. Por ejemplo, si deseas buscar todos los elementos de una matriz que sean mayores que 10, puedes usar el siguiente código:

let numeros = [5, 10, 15, 20, 25];
let mayoresA10 = [];

for (let i = 0; i < numeros.length; i++) {
 if (numeros[i] > 10) {
    mayoresA10.push(numeros[i]);
 }
}

console.log(mayoresA10); // Salida: [15, 20, 25]

Ten en cuenta que el método filter() es la forma más recomendada de realizar búsquedas avanzadas en matrices en JavaScript, ya que es fácil de leer y fácil de escribir.

Eliminar duplicados de matriz

Existen varias formas de eliminar duplicados en una matriz en JavaScript. A continuación, se presentan algunas de las formas más comunes:

Usar el método filter(): Este método crea un nuevo array con todos los elementos que cumplen con una condición específica. Por ejemplo, si deseas eliminar duplicados de una matriz, puedes usar el siguiente código:

let numeros = [1, 2, 3, 3, 4, 4, 5];
let numerosSinDuplicados = numeros.filter((numero, indice, array) => array.indexOf(numero) === indice);
console.log(numerosSinDuplicados); // Salida: [1, 2, 3, 4, 5]

Usar un objeto Set: El objeto Set en JavaScript permite almacenar valores únicos de cualquier tipo. Si deseas eliminar duplicados de una matriz, puedes usar el siguiente código:

let numeros = [1, 2, 3, 3, 4, 4, 5];
let numerosSinDuplicados = [...new Set(numeros)];
console.log(numerosSinDuplicados); // Salida: [1, 2, 3, 4, 5]

Usar un bucle for y el método includes(): Sí deseas eliminar duplicados de una matriz, también puedes usar un bucle for y el método includes(). Por ejemplo, si deseas eliminar duplicados de una matriz, puedes usar el siguiente código:

let numeros = [1, 2, 3, 3, 4, 4, 5];
let numerosSinDuplicados = [];

for (let i = 0; i < numeros.length; i++) {
 if (!numerosSinDuplicados.includes(numeros[i])) {
    numerosSinDuplicados.push(numeros[i]);
 }
}

console.log(numerosSinDuplicados); // Salida: [1, 2, 3, 4, 5]

Ten en cuenta que el uso del objeto Set es la forma más recomendada de eliminar duplicados en una matriz en JavaScript, ya que es fácil de leer y fácil de escribir.

Funciones de auto invocación

Una función auto invocable, también conocida como función IIFE (Immediately Invoked Function Expression), es una función en JavaScript que se ejecuta automáticamente después de ser definida. Las funciones auto invocables son útiles cuando deseas limitar el alcance de las variables o ejecutar un bloque de código de manera inmediata.

Aquí tienes un ejemplo de función auto invocable:

(function() {
 console.log('¡Hola, mundo!');
})();

En este ejemplo, la función anónima se envuelve entre paréntesis y se agrega otro par de paréntesis al final para indicar que se trata de una función auto invocable.

Aquí tienes otro ejemplo de función auto invocable que utiliza variables locales para limitar su alcance:

(function() {
 let contador = 0;
 let incrementarContador = function() {
    contador++;
    console.log('Contador:', contador);
 };
 incrementarContador();
 incrementarContador();
})();

En este ejemplo, la función incrementarContador solo puede acceder a la variable contador, lo que la hace segura y útil para tareas que requieren variables temporales.

Copia de matrices con propagación

En JavaScript, también puedes hacer una copia de un array usando el operador de propagación (…). Este operador te permite crear rápidamente y fácilmente un nuevo array con los mismos elementos que el array original. Aquí tienes un ejemplo:

const originalArray = [1, 2, 3, 4, 5];
const copiedArray = [...originalArray];

console.log(copiedArray); // [1, 2, 3, 4, 5]

En este ejemplo, el operador de propagación se utiliza para crear un nuevo array llamado copiedArray con los mismos elementos que originalArray. El operador de propagación “expande” el array original en sus elementos individuales, que a su vez se utilizan para crear el nuevo array.

También puedes usar el operador de propagación para crear una copia de un array y agregar o eliminar elementos al mismo tiempo. Por ejemplo:

const originalArray = [1, 2, 3, 4, 5];
const copiedArray = [...originalArray, 6, 7];

console.log(copiedArray); // [1, 2, 3, 4, 5, 6, 7]

En este ejemplo, el operador de propagación se utiliza para crear un nuevo array llamado copiedArray con los mismos elementos que originalArray, además de los elementos adicionales 6 y 7.

Es importante tener en cuenta que el operador de propagación crea una “copia superficial” del array original. Esto significa que si los elementos del array original son objetos, el nuevo array contendrá referencias a esos mismos objetos, en lugar de copias de ellos. Si necesitas crear una “copia profunda” de un array, con copias de todos los objetos anidados, tendrás que utilizar un enfoque diferente, como el método JSON.parse(JSON.stringify(array)).

Conclusiones

En el ámbito del desarrollo web, JavaScript se erige como una herramienta esencial, y este artículo proporciona una visión práctica de trucos y consejos que pueden revolucionar la forma en que los desarrolladores escriben y optimizan su código. Desde el uso eficiente del destructuring para simplificar la manipulación de datos hasta la implementación de copias profundas con JSON para evitar efectos secundarios no deseados, cada técnica presentada aquí tiene el potencial de mejorar significativamente la eficiencia y la claridad del código. Además, se destacan métodos para asignar valores predeterminados y realizar búsquedas avanzadas en matrices, así como estrategias para eliminar duplicados y aprovechar las funciones auto invocables. Por último, se aborda la copia de matrices con propagación, lo que demuestra la versatilidad y el poder de JavaScript como lenguaje de programación. En resumen, este artículo es una mina de oro de conocimientos que todo desarrollador web debería explorar para llevar sus habilidades al siguiente nivel.

0 0 votos
Valora la Publicación
Suscribirse
Notificarme de
guest
0 Comentarios
Feedback en línea
Ver todos los Comentarios