Saltar al contenido principal

50 Ejercicios de Practica de JavaScript

¡Hola! Estos son algunos ejercicios fundamentales para comprender los conceptos básicos de JavaScript, incluyendo variables, hoisting, operadores y salidas por consola. Si tienes dudas no dudes en preguntar.


1. El saludo amistoso

Problema

Crea una variable llamada nombre que almacene tu nombre y muestra en consola el mensaje "Hola, [nombre]!". Usa concatenaciones.

Ejemplo

  • Entrada: "Ana"
  • Salida: "Hola, Ana!"
💡 Ver solución
let nombre = "Ana";
console.log("Hola, " + nombre + "!");

2. El intercambio de valores

Problema

Tienes dos variables con valores diferentes. Debes intercambiar sus valores sin usar una variable temporal.

Ejemplo

  • Entrada: x = 5, y = 10
  • Salida: x = 10, y = 5
💡 Ver solución
let x = 5;
let y = 10;

[x, y] = [y, x];
console.log("x:", x); // 10
console.log("y:", y); // 5

3. El área del rectángulo

Problema

Declara dos constantes base y altura y calcula el área de un rectángulo (base * altura), sin usar funciones.

Ejemplo

  • Entrada: base = 4, altura = 3
  • Salida: 12
💡 Ver solución
const base = 4;
const altura = 3;
console.log(base * altura);

4. El precio con descuento

Problema

Declara dos variables: precio y descuento. Calcula el precio final aplicando el descuento (en porcentaje). No uses funciones.

Ejemplo

  • Entrada: precio = 100, descuento = 20
  • Salida: 80
💡 Ver solución
let precio = 100;
let descuento = 20; // en porcentaje
let precioFinal = precio - (precio * descuento) / 100;
console.log(precioFinal);

5. Comparación simple

Problema

Declara dos variables x y y y muestra true si x es mayor que y, de lo contrario false.

Ejemplo

  • Entrada: x = 10, y = 7
  • Salida: true
💡 Ver solución
let x = 10;
let y = 7;
console.log(x > y);

6. El operador lógico AND

Problema

Crea dos variables booleanas llueve y tengoParaguas. Muestra true solo si ambas son verdaderas.

Ejemplo

  • Entrada: llueve = true, tengoParaguas = true
  • Salida: true
💡 Ver solución
let llueve = true;
let tengoParaguas = true;
console.log(llueve && tengoParaguas);

7. El operador lógico OR

Problema

Crea dos variables booleanas tengoDinero y tengoTiempo. Muestra true si al menos una es verdadera.

Ejemplo

  • Entrada: tengoDinero = false, tengoTiempo = true
  • Salida: true
💡 Ver solución
let tengoDinero = false;
let tengoTiempo = true;
console.log(tengoDinero || tengoTiempo);

8. Hoisting en acción

Problema

Demuestra el concepto de hoisting usando var para declarar una variable después de usarla.
Nota: Esto no funciona igual con let o const.

Ejemplo

  • Salida esperada: undefined y luego el valor asignado.
💡 Ver solución
console.log(miVariable); // undefined
var miVariable = "Hola mundo";
console.log(miVariable); // "Hola mundo"

9. La calculadora básica

Problema

Crea una calculadora que realice las cuatro operaciones básicas (suma, resta, multiplicación y división) con dos números.

Ejemplo

  • Entrada: num1 = 10, num2 = 5
  • Salida:
    Suma: 15
    Resta: 5
    Multiplicación: 50
    División: 2
💡 Ver solución
const num1 = 10;
const num2 = 5;

console.log("Suma:", num1 + num2);
console.log("Resta:", num1 - num2);
console.log("Multiplicación:", num1 * num2);
console.log("División:", num1 / num2);

10. Incremento y decremento (prefijo vs postfijo)

Problema

Demuestra la diferencia entre los operadores de incremento (++) y decremento (--) cuando se usan como prefijo (antes de la variable) y postfijo (después de la variable).

Ejemplo

let num = 5;
// ¿Qué valores se imprimirán en cada caso?
💡 Ver solución
let num = 5;

console.log(num++); // 5 (postfijo: primero imprime, luego incrementa)
console.log(num); // 6 (ahora el valor está actualizado)

console.log(++num); // 7 (prefijo: primero incrementa, luego imprime)
console.log(num--); // 7 (postfijo: primero imprime, luego decrementa)
console.log(num); // 6 (valor actualizado)
console.log(--num); // 5 (prefijo: primero decrementa, luego imprime)

Recursos adicionales (Ejercicios Fáciles)


11. ¿Es mayor de edad?

Problema

Usa una estructura if/else para mostrar "Mayor de edad" si la edad es mayor o igual a 18, o "Menor de edad" en caso contrario.

Ejemplo

  • Entrada: edad = 20
  • Salida: "Mayor de edad"
💡 Ver solución
let edad = 20;
if (edad >= 18) {
console.log("Mayor de edad");
} else {
console.log("Menor de edad");
}

12. Clasificación de notas

Problema

Usa if/else if/else para clasificar una nota:

  • >= 90: "Excelente"
  • >= 70: "Aprobado"
  • < 70: "Reprobado"

Ejemplo

  • Entrada: nota = 85
  • Salida: "Aprobado"
💡 Ver solución
let nota = 85;
if (nota >= 90) {
console.log("Excelente");
} else if (nota >= 70) {
console.log("Aprobado");
} else {
console.log("Reprobado");
}

13. Día de la semana

Problema

Usa un switch para mostrar el nombre del día de la semana según un número del 1 al 7.

Ejemplo

  • Entrada: dia = 3
  • Salida: "Miércoles"
💡 Ver solución
let dia = 3;
switch (dia) {
case 1:
console.log("Lunes");
break;
case 2:
console.log("Martes");
break;
case 3:
console.log("Miércoles");
break;
case 4:
console.log("Jueves");
break;
case 5:
console.log("Viernes");
break;
case 6:
console.log("Sábado");
break;
case 7:
console.log("Domingo");
break;
default:
console.log("Número inválido");
}

14. Aprobación con operador ternario

Problema

Usa el operador ternario para mostrar "Aprobado" si la nota es mayor o igual a 70, o "Reprobado" si es menor.

Ejemplo

  • Entrada: nota = 65
  • Salida: "Reprobado"

P.D.: El operador ternario es una forma corta de escribir un if/else. Su sintaxis es:

condición ? valorSiVerdadero : valorSiFalso;
💡 Ver solución
let nota = 65;
console.log(nota >= 70 ? "Aprobado" : "Reprobado");

15. Contar hasta 5 con for

Problema

Usa un bucle for para mostrar los números del 1 al 5.

Ejemplo

  • Salida: 1 2 3 4 5
💡 Ver solución
for (let i = 1; i <= 5; i++) {
console.log(i);
}

16. Cuenta regresiva con while

Problema

Usa un bucle while para contar desde 5 hasta 1.

Ejemplo

  • Salida: 5 4 3 2 1
💡 Ver solución
let i = 5;
while (i >= 1) {
console.log(i);
i--;
}

17. Suma de números con for

Problema

Usa un for para sumar los números del 1 al 10 y muestra el resultado.

Ejemplo

  • Salida: 55
💡 Ver solución
let suma = 0;
for (let i = 1; i <= 10; i++) {
suma += i;
}
console.log(suma);

18. Función para saludar

Problema

Crea una función saludar que reciba un nombre como parámetro y muestre "Hola, [nombre]!".

Ejemplo

  • Entrada: "Carlos"
  • Salida: "Hola, Carlos!"
💡 Ver solución
function saludar(nombre) {
console.log("Hola, " + nombre + "!");
}
saludar("Carlos");

19. Función para calcular el cuadrado

Problema

Crea una función cuadrado que reciba un número y devuelva su cuadrado, es decir, que se multiplique por si mismo.

Ejemplo

  • Entrada: 4
  • Salida: 16
💡 Ver solución
function cuadrado(num) {
return num * num;
}
console.log(cuadrado(4));

20. Función para verificar par/impar

Problema

Crea una función esPar que reciba un número y devuelva true si es par y false si es impar.

Ejemplo

  • Entrada: 5
  • Salida: false
💡 Ver solución
function esPar(num) {
return num % 2 === 0;
}
console.log(esPar(5));

Recursos adicionales (Ejercicios Básicos)


21. Agregar elemento a un array

Problema

Crea una función agregarElemento que reciba un array y un elemento, y lo agregue al final usando push.

Ejemplo

  • Entrada: [1, 2, 3], 4
  • Salida: [1, 2, 3, 4]
💡 Ver solución
function agregarElemento(arr, elem) {
arr.push(elem);
return arr;
}
console.log(agregarElemento([1, 2, 3], 4));

22. Eliminar último elemento de un array

Problema

Crea una función eliminarUltimo que reciba un array y elimine su último elemento usando pop.

Ejemplo

  • Entrada: [1, 2, 3]
  • Salida: [1, 2]
💡 Ver solución
function eliminarUltimo(arr) {
arr.pop();
return arr;
}
console.log(eliminarUltimo([1, 2, 3]));

23. Acceder a una propiedad de un objeto

Problema

Crea una función obtenerNombre que reciba un objeto con la propiedad nombre y devuelva su valor.

Ejemplo

  • Entrada: { nombre: "Ana", edad: 20 }
  • Salida: "Ana"
💡 Ver solución
function obtenerNombre(obj) {
return obj.nombre;
}
console.log(obtenerNombre({ nombre: "Ana", edad: 20 }));

24. Modificar una propiedad de un objeto

Problema

Crea una función cambiarEdad que reciba un objeto con la propiedad edad y le sume 1.

Ejemplo

  • Entrada: { nombre: "Ana", edad: 20 }
  • Salida: { nombre: "Ana", edad: 21 }
💡 Ver solución
function cambiarEdad(obj) {
obj.edad += 1;
return obj;
}
console.log(cambiarEdad({ nombre: "Ana", edad: 20 }));

25. Copia superficial con spread operator

Problema

Crea una función copiarObjeto que reciba un objeto y devuelva una copia usando el operador ....

Ejemplo

  • Entrada: { a: 1, b: 2 }
  • Salida: { a: 1, b: 2 }
💡 Ver solución
function copiarObjeto(obj) {
return { ...obj };
}
console.log(copiarObjeto({ a: 1, b: 2 }));

26. Copia superficial con Object.assign

Problema

Crea una función copiarConAssign que reciba un objeto y devuelva una copia usando Object.assign.

Ejemplo

  • Entrada: { x: 10, y: 20 }
  • Salida: { x: 10, y: 20 }
💡 Ver solución
function copiarConAssign(obj) {
return Object.assign({}, obj);
}
console.log(copiarConAssign({ x: 10, y: 20 }));

27. Agregar varias propiedades a un objeto

Problema

Crea una función agregarDatos que reciba un objeto y le agregue propiedades nuevas: pais y ciudad.

Ejemplo

  • Entrada: { nombre: "Ana" }
  • Salida: { nombre: "Ana", pais: "Colombia", ciudad: "Bogotá" }
💡 Ver solución
function agregarDatos(obj) {
obj.pais = "Colombia";
obj.ciudad = "Bogotá";
return obj;
}
console.log(agregarDatos({ nombre: "Ana" }));

28. Crear un nuevo array a partir de otro (spread)

Problema

Crea una función duplicarArray que reciba un array y devuelva una copia con los mismos elementos usando ....

Ejemplo

  • Entrada: [1, 2, 3]
  • Salida: [1, 2, 3]
💡 Ver solución
function duplicarArray(arr) {
return [...arr];
}
console.log(duplicarArray([1, 2, 3]));

29. Eliminar propiedad de un objeto

Problema

Crea una función eliminarPropiedad que reciba un objeto y una propiedad, y elimine esa propiedad.

Ejemplo

  • Entrada: { a: 1, b: 2 }, "b"
  • Salida: { a: 1 }
💡 Ver solución
function eliminarPropiedad(obj, prop) {
delete obj[prop];
return obj;
}
console.log(eliminarPropiedad({ a: 1, b: 2 }, "b"));

30. Combinar dos objetos

Problema

Crea una función combinarObjetos que reciba dos objetos y devuelva uno nuevo que los combine usando spread.

Ejemplo

  • Entrada: { a: 1 }, { b: 2 }
  • Salida: { a: 1, b: 2 }
💡 Ver solución
function combinarObjetos(obj1, obj2) {
return { ...obj1, ...obj2 };
}
console.log(combinarObjetos({ a: 1 }, { b: 2 }));

Recursos adicionales (Ejercicios Intermedios)


31. Copia profunda con JSON.parse

Problema

Crea una función deepCopyJSON que reciba un objeto y devuelva una copia profunda usando JSON.stringify y JSON.parse.

Ejemplo

  • Entrada: { a: 1, b: { c: 2 } }
  • Salida: { a: 1, b: { c: 2 } } (copia independiente)
💡 Ver solución
function deepCopyJSON(obj) {
return JSON.parse(JSON.stringify(obj));
}
console.log(deepCopyJSON({ a: 1, b: { c: 2 } }));

32. Copia profunda con recursividad

Problema

Crea una función deepCopyRecursive que reciba un objeto y devuelva una copia profunda usando recursividad.

Ejemplo

  • Entrada: { x: 10, y: { z: 20 } }
  • Salida: { x: 10, y: { z: 20 } } (copia independiente)
💡 Ver solución
function deepCopyRecursive(obj) {
if (typeof obj !== "object" || obj === null) return obj;
let copy = Array.isArray(obj) ? [] : {};
for (let key in obj) {
copy[key] = deepCopyRecursive(obj[key]);
}
return copy;
}
console.log(deepCopyRecursive({ x: 10, y: { z: 20 } }));

33. Desestructuración de objetos

Problema

Crea una función extraerUsuario que reciba un objeto con propiedades nombre y edad y use desestructuración para devolver una cadena "Nombre: X, Edad: Y".

Ejemplo

  • Entrada: { nombre: "Ana", edad: 25 }
  • Salida: "Nombre: Ana, Edad: 25"
💡 Ver solución
function extraerUsuario({ nombre, edad }) {
return `Nombre: ${nombre}, Edad: ${edad}`;
}
console.log(extraerUsuario({ nombre: "Ana", edad: 25 }));

34. Desestructuración de arrays

Problema

Crea una función primerosDos que reciba un array y use desestructuración para devolver sus dos primeros elementos.

Ejemplo

  • Entrada: [10, 20, 30]
  • Salida: 10, 20
💡 Ver solución
function primerosDos(arr) {
const [a, b] = arr;
return [a, b];
}
console.log(primerosDos([10, 20, 30]));

35. Valores por defecto en desestructuración

Problema

Crea una función infoPersona que reciba un objeto con propiedades opcionales nombre y edad, y asigne valores por defecto "Desconocido" y 0 si no existen.

Ejemplo

  • Entrada: { nombre: "Ana" }
  • Salida: "Ana, 0"
💡 Ver solución
function infoPersona({ nombre = "Desconocido", edad = 0 }) {
return `${nombre}, ${edad}`;
}
console.log(infoPersona({ nombre: "Ana" }));

36. Desestructuración anidada

Problema

Crea una función extraerCiudad que reciba un objeto con estructura { direccion: { ciudad: "X" } } y devuelva el nombre de la ciudad.

Ejemplo

  • Entrada: { direccion: { ciudad: "Bogotá" } }
  • Salida: "Bogotá"
💡 Ver solución
function extraerCiudad({ direccion: { ciudad } }) {
return ciudad;
}
console.log(extraerCiudad({ direccion: { ciudad: "Bogotá" } }));

37. Convertir objeto a JSON

Problema

Crea una función aJSON que reciba un objeto y lo convierta en un string JSON usando JSON.stringify.

Ejemplo

  • Entrada: { a: 1, b: 2 }
  • Salida: "{"a":1,"b":2}"
💡 Ver solución
function aJSON(obj) {
return JSON.stringify(obj);
}
console.log(aJSON({ a: 1, b: 2 }));

38. Convertir JSON a objeto

Problema

Crea una función desdeJSON que reciba un string JSON y lo convierta en un objeto usando JSON.parse.

Ejemplo

  • Entrada: "{"a":1,"b":2}"
  • Salida: { a: 1, b: 2 }
💡 Ver solución
function desdeJSON(str) {
return JSON.parse(str);
}
console.log(desdeJSON('{"a":1,"b":2}'));

39. Combinar desestructuración y JSON

Problema

Crea una función parsearYExtraer que reciba un string JSON con propiedades nombre y edad, lo convierta en objeto y use desestructuración para devolver "X tiene Y años".

Ejemplo

  • Entrada: '{"nombre":"Ana","edad":25}'
  • Salida: "Ana tiene 25 años"
💡 Ver solución
function parsearYExtraer(str) {
const { nombre, edad } = JSON.parse(str);
return `${nombre} tiene ${edad} años`;
}
console.log(parsearYExtraer('{"nombre":"Ana","edad":25}'));

40. Copia profunda y modificación independiente

Problema

Crea una función copiaIndependiente que haga una copia profunda de un objeto y modifique la copia sin afectar el original.

Ejemplo

  • Entrada: obj = { datos: { edad: 20 } }, cambiar edad en copia a 21.
  • Salida: original { datos: { edad: 20 } }, copia { datos: { edad: 21 } }
💡 Ver solución
function copiaIndependiente(obj) {
const copia = JSON.parse(JSON.stringify(obj));
copia.datos.edad = 21;
return { original: obj, copia: copia };
}
console.log(copiaIndependiente({ datos: { edad: 20 } }));

Recursos adicionales (Ejercicios Avanzados)


41. Procesar JSON y hacer copia profunda

Problema

Crea una función que reciba un objeto JSON, lo procese convirtiendo todas sus claves a mayúsculas y devuelva una copia profunda del mismo.

Ejemplo

  • Entrada: { "nombre": "Ana", "edad": 25 }
  • Salida: { "NOMBRE": "Ana", "EDAD": 25 }
💡 Ver solución
function procesarJSON(obj) {
const copia = JSON.parse(JSON.stringify(obj));
const resultado = {};
for (let clave in copia) {
resultado[clave.toUpperCase()] = copia[clave];
}
return resultado;
}
console.log(procesarJSON({ nombre: "Ana", edad: 25 }));

42. Contar elementos en un array de forma recursiva

Problema

Crea una función recursiva que cuente el número de elementos en un arreglo.

Ejemplo

  • Entrada: [1,2,3,4]
  • Salida: 4
💡 Ver solución
function contarRecursivo(arr) {
if (arr.length === 0) return 0;
return 1 + contarRecursivo(arr.slice(1));
}
console.log(contarRecursivo([1, 2, 3, 4]));

43. Filtrar usuarios por edad (JSON)

Problema

Crea una función que reciba un arreglo de objetos con nombre y edad, y devuelva solo los usuarios mayores de 18 años.

Ejemplo

  • Entrada: [ {nombre: "Ana", edad: 17}, {nombre: "Luis", edad: 20} ]
  • Salida: [ {nombre: "Luis", edad: 20} ]
💡 Ver solución
function filtrarMayores(usuarios) {
return usuarios.filter((u) => u.edad > 18);
}
console.log(
filtrarMayores([
{ nombre: "Ana", edad: 17 },
{ nombre: "Luis", edad: 20 },
])
);

44. Sumar todos los números de un arreglo (recursivo)

Problema

Crea una función recursiva que sume todos los números de un arreglo.

Ejemplo

  • Entrada: [1,2,3]
  • Salida: 6
💡 Ver solución
function sumaRecursiva(arr) {
if (arr.length === 0) return 0;
return arr[0] + sumaRecursiva(arr.slice(1));
}
console.log(sumaRecursiva([1, 2, 3]));

45. Mini-proyecto: Contador de palabras

Problema

Crea una función que reciba un texto y devuelva un objeto con cada palabra y el número de veces que aparece.

Ejemplo

  • Entrada: "hola mundo hola"
  • Salida: { hola: 2, mundo: 1 }
💡 Ver solución
function contarPalabras(texto) {
const palabras = texto.split(" ");
const contador = {};
for (let p of palabras) {
contador[p] = (contador[p] || 0) + 1;
}
return contador;
}
console.log(contarPalabras("hola mundo hola"));

46. Invertir una cadena de forma recursiva

Problema

Crea una función recursiva que invierta un string.

Ejemplo

  • Entrada: "hola"
  • Salida: "aloh"
💡 Ver solución
function invertirCadena(str) {
if (str === "") return "";
return invertirCadena(str.slice(1)) + str[0];
}
console.log(invertirCadena("hola"));

47. Validar contraseña segura

Problema

Crea una función que valide si una contraseña es segura (mínimo 8 caracteres, al menos una mayúscula, una minúscula y un número).

Ejemplo

  • Entrada: "Hola1234"
  • Salida: true
💡 Ver solución
function validarContrasena(pass) {
return (
/[A-Z]/.test(pass) &&
/[a-z]/.test(pass) &&
/[0-9]/.test(pass) &&
pass.length >= 8
);
}
console.log(validarContrasena("Hola1234"));

48. Mini-proyecto: Generar lista numerada

Problema

Crea una función que reciba un arreglo de strings y devuelva un arreglo con los elementos numerados.

Ejemplo

  • Entrada: ["manzana", "pera"]
  • Salida: ["1. manzana", "2. pera"]
💡 Ver solución
function listaNumerada(arr) {
return arr.map((item, i) => `${i + 1}. ${item}`);
}
console.log(listaNumerada(["manzana", "pera"]));

49. Aplanar un arreglo anidado (recursivo)

Problema

Crea una función recursiva que aplane un arreglo de cualquier profundidad.

Ejemplo

  • Entrada: [1, [2, [3, 4]], 5]
  • Salida: [1, 2, 3, 4, 5]
💡 Ver solución
function aplanar(arr) {
return arr.reduce(
(acc, val) =>
Array.isArray(val) ? acc.concat(aplanar(val)) : acc.concat(val),
[]
);
}
console.log(aplanar([1, [2, [3, 4]], 5]));

50. Mini-proyecto: Conversor de temperatura

Problema

Crea una función que convierta de grados Celsius a Fahrenheit y viceversa según un parámetro adicional.

Ejemplo

  • Entrada: (0, "CtoF")
  • Salida: 32
💡 Ver solución
function convertirTemp(valor, tipo) {
if (tipo === "CtoF") return (valor * 9) / 5 + 32;
if (tipo === "FtoC") return ((valor - 32) * 5) / 9;
return null;
}
console.log(convertirTemp(0, "CtoF"));

Recursos adicionales (Ejercicios Experto)


💡 "Hola estudiante de DMI, ¡no te desanimes si no lograste alguno! lo intentaste y eso es muy importante. Cada línea de código que escribes es un paso más para mejorar tu manejo en JS ¡Sigue adelante, éxitos! - Att: El profesor Kevin y la monitora Sary."