Skip to content

Latest commit

 

History

History
501 lines (398 loc) · 12.7 KB

File metadata and controls

501 lines (398 loc) · 12.7 KB

Clase 9

Ejercicios

1 - Junta estos tres Arrays ["Oscar", ...], [9897667, ...], [false, ...] de tal forma que construyan un único Array anidado [["Oscar", 9897667, false], [etc...]]

  • Opcional: Ordena los números pares e impares en sus respectivos arrays
	var arreglo1 = ["Oscar", "Pedro", "Marco", "Juana"],
		arreglo2 = [9897667, 81721623, 91823871, 71236123],
		arreglo3 = [false, true, true, false];
	
	var anidacion = [];
	
	for (var i = 0; i <= arreglo1.length; i++){
		var resumen = [arreglo1[i], arreglo2[i], arreglo3[i]];
		anidacion.push(resumen);
	}
	
	console.log("El resultado es %O", anidacion);
  • Variante (Diferentes longitudes)
	var arreglo1 = ["Oscar", "Pedro", "Marco", "Juana", true, 4, 12, 12],
	    arreglo2 = [9897667, 81721623, 91823871, 71236123],
	    arreglo3 = [false, true, true, false];
	
	// Saber valor Máximo
	var maximo = Math.max(arreglo1.length, arreglo2.length, arreglo3.length);
	
	// Nivelar - Fase 1:
	arreglo1[maximo] = "";
	arreglo2[maximo] = "";
	arreglo3[maximo] = "";
	
	// Fix
	arreglo1.pop();
	arreglo2.pop();
	arreglo3.pop();
	
	
	var anidacion = [];
	
	for (var i = 0; i < arreglo1.length; i++){
	    anidacion.push([arreglo1[i], arreglo2[i], arreglo3[i]]);
	}
	
	console.log("El resultado es %O", anidacion); 

2 - Crea un Array con 100 numeros enteros al azar. Después crea un array para almacenar los números pares y otro array para los impares.

  • Opcional: Ordena los números pares e impares en sus respectivos arrays
	var arrayPares = [], arrayImpares = [];
	
	for (var i = 0; i<100; i++){
		var random = Math.floor((Math.random() * 6) + 1)
		if(random % 2 !== 0){
			arrayImpares.push(random);
		} else {
			arrayPares.push(random);
		}
	}
	
	// Opcional
	arrayPares = arrayPares.sort();
	arrayImpares = arrayImpares.sort();

3 - Vamos a gestionar la lista de asistentes de un evento.

  • Características:

    • Cada asistente recibirá el identificador de su posición en el Array.
    • El identificador no puede cambiar una vez reservado el asiento.
    • Los asistentes pueden darse de baja, y el asiento que ocupaban queda libre.
    • Los nuevos asistentes seran asigandos primero a asientos desocupados.
  • Opcional:

    • Verifica antes de asignar un asistente que no se registro previamente.
	var lista = [];
	
	function asignar(nombre) {
	    var registrado = false;
	    var vacante = false;
	
	    for (var i = 0; i < lista.length; i++) {
	        if (lista[i] === undefined) {
	            vacante = i;
	        }
	        if (lista[i] === nombre) {
	            registrado = i;
	        }
	    }
	
	    if (registrado || registrado === 0) {
	        console.warn("Ya estabas registrado!");
	        console.info("Eres el asistente número", registrado);
	    } else {
	        if (vacante || vacante === 0) {
	            lista[vacante] = nombre;
	            console.info("Eres el asistente número", vacante);
	            console.info("Felicidades! has ocupado un asiento que estaba vacio.");
	        } else {
	            lista.push(nombre);
	            console.info("Eres el asistente número", lista.length - 1);
	            console.info("No quedan asientos vacios antes que el tuyo.");
	        }
	    }
	
	}
	
	function quitar(nombre) {
	    var registrado = false;
	
	    for (var i = 0; i < lista.length; i++) {
	        if (lista[i] === nombre) {
	            registrado = i;
	        }
	    }
	
	    if (registrado || registrado === 0) {
	        lista[registrado] = undefined;
	        console.info("El asistente " + nombre + " ha sido eliminado.");
	        console.info("El asiento " + registrado + " esta vacio.");
	    } else {
	        console.warn("El asistente " + nombre + "... no existe!");
	    }
	}
	
	// Test:
	asignar("Ulises");
	/*
	Eres el asistente número 0
	No quedan asientos vacios antes que el tuyo.
	*/
	asignar("Yo mismo");
	/*
	Eres el asistente número 1
	No quedan asientos vacios antes que el tuyo.
	*/
	quitar("ulises"); // El asistente ulises... no existe!
	quitar("Ulises");
	/*
	El asistente Ulises ha sido eliminado.
	El asiento 0 esta vacio.
	*/
	asignar("Carlos"); // Eres el asistente número 0
	asignar("Carlos");
	/*
	Ya estabas registrado!
	Eres el asistente número 0
	*/

Objetos

Objetos Literales

  • Propiedades:

    var miObjeto = {
        cadena: 'esto es una cadena',
        numero: 2,
        booleano: false
    };
  • Métodos:

    var miObjeto = {
        saludar: function(){
    		console.log("hola!");
    	}
    };
  • Trabajando con espacios y caracteres especiales:

    var miObjeto = {
    	nombre: "objeto",
        "año": 2015,
        "estado del sistema": "correcto"
    };
    
    console.log(miObjeto["año"]);
    miObjeto["estado del sistema"] = "fuera de servicio";
    console.log(miObjeto["estado del sistema"]);
  • Acortar objetos:

    var objetoAbreviado = objeto.muy.muy.largo.que.tiene.muchos["metodos y propiedades"];
    
    objetoAbreviado.propiedad1;
    objetoAbreviado.metodo1();

Métodos

  • .defineProperties() Define nuevas o modifica propiedades existentes directamente en el objeto, returnando el objeto.:

    	var miObjeto = {propiedad: "Propiedad original..."}
    Object.defineProperties(miObjeto, {
      "propiedad1": {
        value: true,
        writable: true
      },
      "propiedad2": {
        value: "Cadena de texto",
        writable: false
      }
    });
    console.info(miObjeto);
    miObjeto.propiedad = "Propiedad original Modificada";
    console.info(miObjeto.propiedad);
    miObjeto.propiedad2 = "Cadena de texto... ¿modificada?";
    console.info(miObjeto.propiedad2);
  • .getOwnPropertyDescriptor() Devuelve las detalles de los objetos y métodos del objeto. Undefined en caso de no existir:

    var miObjeto = {
      metodo: function() {
      	console.log(miObjeto.propiedad1)
      },
      propiedad1: "Datos"
    };
    
    console.info(Object.getOwnPropertyDescriptor(miObjeto, 'propiedad1'));
    // Object {value: "Datos", writable: true, enumerable: true, configurable: true}
    
    console.info(Object.getOwnPropertyDescriptor(miObjeto, 'inventado'));
    // undefined
  • .getOwnPropertyNames() Devuelve un array con todos los nombres de las propiedades y métodos del objeto:

    var miObjeto = {
      metodo: function() {
      	console.log(miObjeto.propiedad1)
      },
      propiedad1: "Datos"
    };
    
    console.log(Object.getOwnPropertyNames(miObjeto));
    // ["metodo", "propiedad1"]
  • .isExtensible() Determina si un objeto es extensible:

    var miObjeto = {
      metodo: function() {
      	console.log(miObjeto.propiedad1)
      },
      propiedad1: "Datos"
    };
    
    console.log("¿Se puede extender?", Object.isExtensible(miObjeto));
    
    var sellado = Object.seal(miObjeto);
    console.log("¿Se puede extender?", Object.isExtensible(sellado));
    
    var congelado = Object.freeze(miObjeto);
    console.log("¿Se puede extender?", Object.isExtensible(congelado));
    
    Object.preventExtensions(miObjeto);
    console.log("¿Se puede extender?", Object.isExtensible(miObjeto));
  • .hasOwnProperty() Devuelve true o false si l apropiedad existe o no:

    var miObjeto = {
      metodo: function() {
      	console.log(miObjeto.propiedad1)
      },
      propiedad1: "Datos"
    };
    
    console.log("¿Tiene la propiedad \"propiedad1\"?", miObjeto.hasOwnProperty('propiedad1'));
    console.log("¿Tiene la propiedad \"propiedad2\"?", miObjeto.hasOwnProperty('propiedad2'));
  • .propertyIsEnumerable() Devuelve true o false si la propiedad es especificada es enumerable.:

    var miObjeto = {
      metodo: function() {
      	console.log(miObjeto.propiedad1)
      },
      propiedad1: "Datos"
    };
    
    console.log("¿Es enumerable \"propiedad1\"?", miObjeto.propertyIsEnumerable('propiedad1'));
    console.log("¿Es enumerable \"metodo\"?", miObjeto.propertyIsEnumerable('propiedad2'));
  • .toLocaleString() Retorna como string (configuración regional) todas las propiedades:

    var fecha = new Date();
    
    var miObjeto = {
      metodo: function() {
      	console.log(miObjeto.propiedad1)
      },
      propiedad1: "Datos",
      fecha: fecha
    };
    
    miObjeto.toLocaleString()
    console.log("La fecha es ", miObjeto.fecha);

For... in

Itera sobre todas las propiedades de un objeto, en un orden arbitriario.

	var objeto1 = {
		propiedad1: "hola",
		propiedad2: 2,
		propiedad3: false,
		propiedad4: [true,2,5, "..."],
		propiedad5: {
			dato: "más datos..."
		},
		metodo: function(){
			console.log("hola");
		}
	}
	function mostrar_propiedades(objeto, nombreObjeto) {
	   var resultado = "";
	   for (var i in objeto) {
	      resultado += nombreObjeto + "." + i + " = " + objeto[i] + "\n";
	   }
	   return resultado;
	}
	
	mostrar_propiedades(objeto1, "objeto1");

Funciones

  • Propiedad name:
	function miFuncion (){
		// vacia
	};

	console.log(miFuncion.name);
  • Declaración y ejecución:
	function dameTrue (){
		return true
	};

	function dameFalse () {
		return false
	};

	dameTrue();
	dameFalse();
  • Argumentos:

    • El exceso de argumentos no es un problema
    • La falta de argumento crea un valor indefinido
    • El Objeto Arguments no es un Array, solo es similar.
    function pruebaArguemntos () {
    console.log(arguments);
    console.info(arguments[0]);
    console.info(arguments[1]);
    }
    
    pruebaArguemntos (1, "vale", true);
  • Sumar cuadrados.

	function sumaCuadrados (a, b) {
		return (a*a) + (b*b);
	};

Ejercicios

img

Práctica 1 - Diseña un script para gestionar por consola una máquina expendedora

Características:

  • Solo los usuarios registrados pueden usar la máquina
  • El sistema funciona sin dinero real, en su lugar se usa un sistema de puntos
  • Los usuarios disponen de unos puntos para gastar en la máquina que el departamento de personal asigna.
  • La maquina no concederá creditos, solo trabaja en base a los puntos disponibles.
  • Para agilizar la reposición de lo consumido... la maquina debe controlar en stock

Paso 1 - Creamos los primeros objetos básicos:

  • Maquina Expendedora (Objeto)
  • Productos (Array)
  • Clientes (Array)
	// Tu solución

Paso 2 - Creamos los primeros perfiles en el Array de clientes:

  • Propiedades:
    • Nombre
    • Usuario
    • Contraseña
    • Tipo usuario
    • Presupuesto
	// Tu solución

Paso 3 - Creamos varios métodos para gestionar a los clientes y sus necesidades

  • Metodos:

    • Consultar saldo de un cliente
      • Devolverá el saldo existente o -1 en caso de error
      • Comprobaremos la contraseña y el usuario
    • Consultar gastos de un cliente
      • Devolverá un array o false en caso de error
      • Comprobaremos la contraseña y el usuario
    • Agregar un cliente
    • Eliminar un cliente
  • Caracteristicas:

    • Evitaremos que se registren usuarios que ya existan
    • Evitaremos eliminar usuarios que no existan
    • Evitaremos dar de alta usuarios que no esten debidamente cumplimentados
    • Protegeremos las funciones de gestión de usuarios con la contraseña ficticiaMola
	// Tu solución

Paso 4 - Creamos varios métodos para gestionar a los productos y sus necesidades

  • Creamos 5 productos que estarán disponibles a la venta

  • Métodos:

    • Consumir un producto (cliente)
      • Comprobaremos la contraseña y el usuario
      • Devolverá el producto o -1 en caso de no existir o estar agotado
      • Actualizaremos el stock
      • Actualizaremos el saldo del cliente
    • Agregar un producto a la máquina (administración)
    • Eliminar un prodcutos de la máquina (administración)
  • Caracteristicas:

    • Evitaremos agregar productos que ya existan
    • Evitaremos eliminar productos que no existan
    • Evitaremos agregar productos que no esten debidamente cumplimentados
    • Protegeremos las funciones de agregar y eliminar productos con la contraseña ficticiaMola
	// Tu solución

Paso 5 - Ahora podemos agregar los métodos para agregar, retirar y resetear saldo de los usuarios.

  • Importante:
    • Los saldos jamas pueden ser negativos.
	// Tu solución

Paso 6 - Ahora podemos agregar el método para saber la disponibilidad de stock

  • Importante:
    • Es necesaria clave (adminsitrador)
    • Debemos saber las existencias
    • Debemos saber que productos estan disponibles y cuales no.
    • Debemos incluir el código y el nombre
    • Cuando se imprima el informe... es necesario incluir la fecha.
	// Tu solución