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 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");
- 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);
};
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
- Consultar saldo de 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)
- Consumir un producto (cliente)
-
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