SlideShare una empresa de Scribd logo
Explicar los siguientes Conceptos:
1.1 Variables
1.2 Strings
1.3 Funciones (argumentos, return)
1.4 Declaraciones if
1.5 Valores booleanos (true, false)
Explicaciones
1.1 Variables.- Son espacios que se reservan y que le nombramos con
identificadores para luego asignarles, una o varias veces, valores diferentes.
1.2 Strings.- Son valores que también se les conoce como cadenas de texto,
a estos String se los debe encerrar entre comillas simples o dobles. Ej. 'Calle #18'
1.3 Funciones.- Creamos nuestras funciones para que agrupen líneas de código y procesen u
operen con los valores de los argumentos que se les pasa al momento de llamarlas por su nombre.
También es posible crearlas hasta para que devuelvan tras su finalización un determinado Valor.
1.4 Declaraciones if.- Se usa el if acompañado de una condición(decisión) para que realice
algo o no o continue.
1.5 Valores booleanos (true, false).- Los valores booleanos hacen o ayudan si llevan
o bien un valor true(verdadero) o un valor false(falso).
Explicar los siguientes Conceptos:
3.1a for
3.1b &&, ||, !
Explicaciones:
3.1a for.- La declaración for permite hacer repeticiones de las intrucciones o líneas de códigos
que se escriban dentro de sus llaves, estas repeticiones se terminan cuando la condición
da respuesta false.
3.1b &&, ||, !.- Estos símbolos trabajan con valores tipo boolean (true y false), es decir,
los dos primeros símbolo entre valores booleanos y devuelve una respuesta booleana.
Ejemplo: true && false su respuesta es false;
Y el tercer símbolo un valor booleano a su derecha y asimismo devuelve otro valor booleano.
Ejemplo: !true y devuelve false.
Las respuestas, de los dos primeros símbolos se rigen de acuerdo a lo siguiente:
Supongamos que tengo del lado izquierdo del símbolo una expresión que le llamaremos P;
Y en el lado derecho una expresión que le llamaremos Q, entonces:
P && Q Respuesta
Si true && true true
Si true && false false
Si false && true false
Si false && false false
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 1 / 23
Observación: Solo es true cuando ambos son true
P || Q Respuesta
Si true || true true
Si true || false true
Si false || true true
Si false || false false
Observación: Basta que uno de los operandos sea true para que la respuesta de true.
Importante: Solo da como respuesta false cuando ambos son false.
P !P Respuesta
Si true !true false
Si false !false true
Observación: La negación del valor booleano da como respuesta el otro booleano.
P !!P Respuesta
Si true !!true true
Si false !!false false
Observación: La negación de la negación del valor booleano da como respuesta el mismo valor.
En un archivo de texto separado que debes crear, escribe explicaciones de los siguientes conceptos
como si se lo estuvieras explicando a un niño de 12 años. Hacer esto te ayudará a descubrir rápidamente
cualquier agujero en tu comprensión.
Arrays.
Explicación:
Los Arrays.- Son objetos que se los puede nombrar con un apodo y se les puede pasar muchos valores distintos separados
por comas, dentro de corchetes, al momento de declararlos o despues a través de índices de posición o con sus funciones. Ejemplos:
Crear un arreglo de 3 elementos en su declaracion:
var lista = ['Ana',12,true];
Declarar un arreglo vacío o sin elementos:
var lista02 = [];
Al arreglo declarado, de apodo o nombre, lista02 añádale, en la posición 0, un valor string:
lista02[0] = 'OCP0120';
Al mismo arreglo anterior añádele, al final, otro valor string con la funcion push():
lista02.push('AMP0238');
Al arreglo, declarado primerito, de apodo lista añádale, al inicio, un valor numérico con la función unshift():
lista.unshift(73456);
Al arreglo, declarado primerito, de apodo lista añádale, en la posición 3, un arreglo vacío:
lista[3] = [];
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 2 / 23
1. En un archivo de texto separado que debes crear, escribe explicaciones de los siguientes conceptos como si se lo estuvieras
explicando a un niño de 12 años. Hacer esto te ayudará a descubrir rápidamente cualquier agujero en tu comprensión.
* Objetos
* Propiedades
* Métodos
* Bucle for…in
* Notación de puntos vs notación de corchetes
Explicaciones:
Objetos.- El objeto almacena un conjunto o colección de varios tipos de datos que están ligados a un texto(apodo) clave
para poder extraer su valor grabado, a este par << 'texto clave':value >> se le conoce como propiedad. A esta colección de tipos se
la hace dentro de llaves y a su vez se les declara con un nombre o etiqueta para identificarlo. Ejemplo:
let ecuador = {
'D T': 'Alfaro' ,
arqueros: ['Hernán Galindez', 'Moisés Ramírez', 'Alexander Domínguez'] ,
delanteros: ['Valencia','Estrada', 'Reasco', 'Rodríguez']
};
Observación: La etiqueta del objeto es ecuador y tiene 3 claves que son 'D T' , 'arqueros' y 'delanteros'.
Propiedades.- Las propiedades de los objetos son cada uno de los pares << 'clave':valor >>, el valor puede ser de cualquier tipo, o sea
string, number, boolean, null, undefined, puede hasta ser otro objeto y otras entidades. Por ejemplo del objeto anterior una propiedad es el
par 'D T': 'Alfaro'
Métodos.- Mencionamos en el concepto anterior otras entidades y una de estas son los métodos que no son más que funciones expresadas dentro
del objeto y tratadas igual como propiedades. Ejemplo de una funcion como una propiedad más del objeto, aumentemos al objeto denominado
ecuador un valor función con clave 'tactica'.
ecuador['tactica'] = function nf() { return ['uno', 'uno', 'cuatro', 'tres', 'dos']; };
Bucle for…in.- Con este bucle podemos acceder a todos los elementos(propiedades) que agrupa el objeto, esto de acceder a todos los elementos
se le conoce como recorrer el objeto completamente. Veamos como se lo usa:
for (let propiedad in ecuador) {
console.log(propiedad + ' : ' + ecuador[propiedad]);
}
Notación de puntos vs notación de corchetes.- Son convenciones o formas creadas por los desarrolladores para acceder a las propiedades del
objeto, con la notación punto, usamos el símbolo punto para separar y que clave del objeto escojo para operar con su valor; en cambio con la
notación de corchetes usamos los corchetes, de abrir y cerrar, para encerrar la clave(en string) con la que voy a operar con su valor.
Ejemplo:
Con Notación de punto accedo escribiendo así > ecuador.arqueros;
Con Notación de corchetes accedo escribiendo así > ecuador['arqueros'];
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 3 / 23
1. En un archivo de texto separado que debes crear, escribe explicaciones de los siguientes conceptos como si se lo estuvieras
explicando a un niño de 12 años. Hacer esto te ayudará a descubrir rápidamente cualquier agujero en tu comprensión.
* prototype
* Constructors (de Clases)
Explicaciones:
Prototype.- Son simplemente mecanismos por los que los objetos de Javascript heredan(les dan o les pasan) propiedades de
otros objetos de Javascript y también es posible lo de la herencia porque todos pertenecen al objeto prototype que viene
implementado en javascript.
Ejemplo:
Vamos a construir un objeto function que hará de Construcctor de propiedades para otros, crearemos la función constructora
Car de esta manera, le pusimos inciando con una C en mayúscula a Car por acuerdo entre desarrolladores:
function Car() {
this.doors = 4;
this.maxSpeed = 240;
this.getSpeed = function gS() {
return this.maxSpeed;
}
}
Observación: function Car() { ... } es un objeto Prototype de javascript, por lo que le podemos adicionar una propiedad de
la siguiente manera:
Car.prototype.getSpeed = function pgS() {
return 120;
}
Ahora vamos a crear un objeto que herede estas propiedades creadas, lo hacemos escribiendo lo de acontinuación:
let carInstance = new Car();
Observación: Habrás notado que se ha generado un poliformismo, o sea existe una funcion getSpeed tanto en Car como en
prototype, si hacemos una llamada en console.log de ese método primero lo llama si existiera en Car, en caso de no lo llama
al de prototype, para este ejemplo mostraría por consola el valor de 240, para verificarlo escribamos:
console.log(carInstance.getSpeed());
Si quisiéramos llamar al getSpeed de prototype, los haríamos escribiendo:
console.log(carInstance.__proto__.getSpeed());
Constructors (de Clases).- Los construcctores de clases son justamente lo que hemos utilzado en el ejercicio anterior, o sea
valiéndonos de la funcion constructora como también lo podemos hacer por intermedio del uso de la palabra reservada class,
Construyamos como quedaría la clase usando class:
class Car {
constructor() {
this.doors = 4;
this.maxSpeed = 240;
}
getSpeed() {
return this.maxSpeed;
}
}
Ahora instanciemos esta Clase, lo hacemos igual con new, nos quedaría así:
let instanciaCar = new Car();
Llamemos al método getSpeed, lo haré a través de un console.log:
console.log(instanciaCar.getSpeed());
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 4 / 23
//Funcion constructora empieza la etiqueta con Mayúscula por convención
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
//Añadir otra propiedad a la función constructora
Car.prototype.color = 'color original';
const car1 = new Car('Eagle', 'Talon TSi', 1993);
console.log(car1.color); // 'color original'
car1.color = 'black';
console.log(car1.color); // 'black'
console.log(Object.getPrototypeOf(car1).color); // 'color original'
//Ver la propiedad superior color que cree
car1.__proto__;
//Ver la propiedad sobrecargada color que cree
car1.color;
//Solo el valor de la propiedad superior color
car1.__proto__.color;
//Otro ejemplo de herencia y poliformismo
function Persona(edad) {
this.edad = edad;
}
Persona.prototype.getEdad = function nf() {
return 'tiene: ' + this.edad + ' años';
};
var per1 = new Persona(22);
var per2 = new Persona(34);
var per3 = new Persona(2335);
//Hago poliformismo a objeto per3
per3['getEdad'] = function nf() {
return this.edad/2;
};
per1.getEdad();
per2.getEdad();
per3.getEdad();
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 5 / 23
//Otra forma de asemejarse a una clase(coje de otro objeto que hace de plantilla), definiendo las propiedades en prototype
let Persona = {
nombre: 'Por defecto',
edad: 'Por defecto',
getEdad: function pege() {
return this.edad;
}
getNombre: function pngn() {
return this.nombre;
}
}
var juan = Object.create(Persona);
juan.__proto__;
//Ultima forma reciente
class Persona {
constructor(nombre, apellido) {
this.nombre = nombre;
this.apellido = apellido;
}
getNombre() {
return this.nombre;
}
saludar() {
console.log('Hola!' + this.nombre);
}
}
var toni = new Persona('Toni', 'Tralice');
toni.saludar();
//Herencia
class Empleado extends Persona {
constructor (nombre, apellido, empleo, sueldo) {
super(nombre, apellido);
this.empleo = empleo;
this.sueldo = sueldo;
}
}
var toni = new Empleado('Toni', 'Tralice', 'Profesor', 100);
toni.saludar();
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 6 / 23
FUNCIONES CALLBACK
Cuando pasamos una función(objeto) como argumento y lo recibe el parámetro(objeto) de la otra función se la llama Cb(callback), es como que el
parámetro es una referencia de la función-objeto que recibe.
Ejercicio:
//Declaramos y definimos, como expresión, la función objeto que hace un proceso.
let espacea = function espa(texto_p) {
if (typeof(texto_p)==='string' || typeof(texto_p)==='number') {
if (typeof(texto_p)==='number') { texto_p += ''; } //si el parámetro es numérico lo transforma a string
let vcespa='';
for (let c=0; c<texto_p.length; c++) {
if (c<texto_p.length-1) {
vcespa += texto_p[c] + ' ';
} else {
vcespa += texto_p[c];
}
}
return vcespa;
} else {
return 'No es un valor que se pueda espaciar';
}
};
//Definimos la función que le da los insumos o es la que le pasa valores para que procese la otra función que declaramos y definimos.
function esteV(valor_p, cb_espa_p) {
return (cb_espa_p(valor_p));
}
//Comprobamos si nos funciona el cb, con algunos valores
esteV('hola', espacea);
esteV(2335, espacea);
esteV(true, espacea);
esteV('a', espacea);
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 7 / 23
EJERCICIOS:
function colors(color) {
//La función recibe un color. Devolver el string correspondiente:
//En caso que el color recibido sea "blue", devuleve --> "This is blue"
//En caso que el color recibido sea "red", devuleve --> "This is red"
//En caso que el color recibido sea "green", devuleve --> "This is green"
//En caso que el color recibido sea "orange", devuleve --> "This is orange"
//Caso default: devuelve --> "Color not found"
//Usar el statement Switch.
switch (color) {
case 'blue':
case 'red':
case 'green':
case 'orange':
return 'This is ' + color;
default:
return 'Color not found';
}
}
function esPrimo(numero) {
// Devuelve "true" si "numero" es primo
// De lo contrario devuelve "falso"
// Pista: un número primo solo es divisible por sí mismo y por 1
// Pista 2: Puedes resolverlo usando un bucle `for`
// Nota: Los números 0 y 1 NO son considerados números primos
if (numero===1 || numero===0) {
return false;
} else {
let Es=true;
for (let divisor=2; divisor<Math.abs(numero); divisor++) {
if (Math.abs(numero)%divisor===0) {
Es=false;
break;
}
}
return Es;
}
}
function agregarItemAlComienzoDelArray(array, elemento) {
// Añade el "elemento" al comienzo del array
// y devuelve el array
// Pista: usa el método `.unshift`
// Tu código:
array.unshift(elemento);
return array;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 8 / 23
function numeroMasGrande(numeros) {
// "numeros" debe ser una matriz de enteros (int/integers)
// Devuelve el número más grande
// Tu código:
return Math.max(...numeros);
}
function mesesDelAño(array) {
//Dado un array que contiene algunos meses del año desordenados, recorrer el array buscando los meses de
// "Enero", "Marzo" y "Noviembre", guardarlo en nuevo array y retornarlo.
//Si alguno de los meses no está, devolver: "No se encontraron los meses pedidos"
// Tu código:
let nuevoArray=[];
for (let c_a=0; c_a<array.length; c_a++) {
if (array[c_a]==='Enero' || array[c_a]==='Marzo' || array[c_a]==='Noviembre') {
let yaEsta=false;
for (let c_nA=0;c_nA<nuevoArray.length;c_nA++) {
if (array[c_a]===nuevoArray[c_nA]) {
yaEsta=true;
break;
}
}
if (yaEsta===false) {
nuevoArray.push(array[c_a]);
}
}
}
if (nuevoArray.length===3) {
return nuevoArray;
} else {
return 'No se encontraron los meses pedidos';
}
}
function continueStatement(numero) {
//Iterar en un bucle aumentando en 2 el numero recibido hasta un límite de 10 veces.
//Guardar cada nuevo valor en un array.
//Devolver el array
//Cuando el número de iteraciones alcance el valor 5, no se suma en ese caso y se continua con la siguiente iteración
//Pista: usá el statement 'continue'
// Tu código:
let array=[];
let enDos=numero;
let lim;
for (lim=1; lim<=10; lim++) {
if (lim===5) {
continue;
}
enDos += 2;
array.push(enDos);
}
return array;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 9 / 23
function crearGato (nombre, edad) {
// Crear un nuevo objeto con la propiedad "nombre" y el valor definido como el argumento "nombre".
// Agrega una propiedad al objeto con el nombre "edad" y usa el valor definido en el argumento "edad"
// Agrega un método (funcion) llamado "meow" que devuelva el string "Meow!"
// Devuelve el objeto
// Tu código:
let gato_obj = { 'nombre':nombre };
gato_obj['edad'] = edad;
gato_obj['meow'] = function nf() { return 'Meow!'; };
return gato_obj;
}
function eliminarPropiedad (objeto, unaPropiedad) {
// Elimina la propiedad de objeto cuyo nombre está pasado por el parametro unaPropiedad
// tip: tenes que usar bracket notation
// Devuelve el objeto
// Tu código:
delete objeto[unaPropiedad];
return objeto;
}
function nuevoUsuario (nombre, email, password) {
// Crea un nuevo objeto con las propiedades coincidiendo con los argumentos que se pasan a la función
// Devuelve el objeto
// Tu código:
let usuario_obj = {};
usuario_obj['nombre'] = nombre;
usuario_obj['email'] = email;
usuario_obj['password'] = password;
return usuario_obj;
}
function tieneEmail (usuario) {
// Devuelve "true" si el usuario tiene un valor definido para la propiedad "email"
// De lo contrario, devuelve "false"
// Tu código:
//
//Corrijo lo que se pide, se presta a una confusión el valor null -> SI es un valor que se puede colocar a una clave o sea
//SI existe la clave pero según para el que realizó el ejercicio del test, NO existe. Debió haber redactado de otra manera
//para pasar el test sin hacer trampa. Por decirles algo así debió redactar...
//
//... Devuelve true si en el objeto usuario existe la clave 'email' y false en caso de no existir(undefined) o de tener como valor el null.
//Tú código:
return typeof(usuario['email']) !== 'undefined' && usuario['email'] !== null;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 10 / 23
function sumarLikesDeUsuario (usuario) {
// "usuario" tiene una propiedad llamada "posts" que es un array
// "posts" es un array de objetos "post"
// Cada objeto "post" tiene una propiedad llamada "likes" que es un entero (int/integer)
// Suma todos los likes de todos los objetos "post"
// Devuelve la suma
// Tu código:
//usuario['posts'] es array
//post['likes'] es number
let totalLikes=0;
for (let ck=0; ck<usuario['posts'].length; ck++) {
totalLikes += usuario['posts'][ck]['likes'];
}
return totalLikes;
}
function agregarMetodoCalculoDescuento (producto) {
// Agregar un método (función) al objeto "producto" llamado "calcularPrecioDescuento"
// Este método debe multiplicar el "precio" del "producto" ("producto.precio" o "producto[precio]") y "porcentajeDeDescuento" para obtener el
descuento
// El método resta el descuento del precio y devuelve el precio con descuento
// Devuelve el objeto "producto" al final de la función
// Ejemplo:
// producto.precio -> 20
// producto.porcentajeDeDescuento -> 0.2 (o simplemente ".2")
// producto.calcularPrecioDescuento() -> 20 - (20 * 0.2)
// Tu código:
producto['calcularPrecioDescuento'] = function nf() {
return this['precio'] - (this['precio']*this['porcentajeDeDescuento']);
};
return producto;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 11 / 23
function crearUsuario() {
// Crea una Clase de ES6 o una función constructor llamada "Usuario"
// Debe aceptar un objeto "opciones" con las propiedades "usuario", "nombre", "email" y "password"
// En el `contructor`, define el usuario, el nombre, el email y la contraseña
// El `contructor` debe tener un método llamado "saludar" en su `prototype` que devuelva una string 'Hola, mi nombre es {{nombre}}'
// {{nombre}} debe ser el nombre definido en cada instancia
// Devuelve la clase
// Tu código:
class Usuario {
constructor(objOpc_p) {
this.usuario = objOpc_p['usuario'];
this.nombre = objOpc_p['nombre'];
this.email = objOpc_p['email'];
this.password = objOpc_p['password'];
}
}
Usuario.prototype.saludar = function ups() {
return `Hola, mi nombre es ${this.nombre}`;
};
//let usuarioDeUsu = new Usuario({usuario:'001', nombre:'Adalberto', email:'adalsus@laei.com', password:'hy77667'});
//console.log(usuarioDeUsu.saludar());
return Usuario;
}
function agregarMetodoPrototype(Constructor) {
// Agrega un método al Constructor del `prototype`
// El método debe llamarse "saludar" y debe devolver la string "Hello World!"
// Tu código:
Constructor.prototype.saludar = function cps() {
return 'Hello World!';
};
return Constructor;
}
function agregarStringInvertida() {
// Agrega un método al prototype de String que devuelva la misma cadena de caracteres, pero invertida.
// El método debe llamarse "reverse"
// Ej: 'menem'.reverse() => menem
// 'toni'.reverse() => 'inot'
// Pista: Necesitarás usar "this" dentro de "reverse"
String.prototype.reverse = function spr() {
let texto = this;
let alreves = '';
for (let i = texto.length - 1; i >= 0; i--) {
alreves += texto[i];
}
return alreves;
};
return String;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 12 / 23
// ---------------------------------------------------------------------------//
//Crea el constructor de la clase "Persona"
//Debe tener las propiedades: "nombre", "apellido", "edad" y "domicilio"
//Debe tener un método llamado "detalle" que nos devuelve un objeto con las propiedades de la persona y sus valores.
//Ej: {
// Nombre: 'Juan',
// Apellido: 'Perez',
// Edad: 22,
// Domicilio: 'Saavedra 123'
// }
class Persona {
constructor(nombre, apellido, edad, domicilio) {
// Crea el constructor:
this['nombre'] = nombre;
this['apellido'] = apellido;
this['edad'] = edad;
this['domicilio'] = domicilio;
}
detalle() {
return {'Nombre':this['nombre'], 'Apellido':this['apellido'], 'Edad':this['edad'], 'Domicilio':this['domicilio']};
};
}
function crearInstanciaPersona(nombre, apellido, edad, dir) {
//Con esta función vamos a crear una nueva persona a partir de nuestro constructor de persona (creado en el ejercicio anterior)
//Recibirá los valores "Juan", "Perez", 22, "Saavedra 123" para sus respectivas propiedades
//Devolver la nueva persona creada
let personaObj = new Persona(nombre, apellido, edad, dir);
return personaObj;
}
function agregarMetodo() {
//La función agrega un método "datos" a la clase Persona que toma el nombre y la edad de la persona y devuelve:
//Ej: "Juan, 22 años"
let Datos = {
datos() {
return `${this['nombre']}, ${this['edad']} años`;
}
};
Object.setPrototypeOf(Persona.prototype, Datos);
/*//Otra forma
Persona.prototype.datos = function ppd() {
return `${this['nombre']}, ${this['edad']} años`;
};*/
return Persona;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 13 / 23
function mayuscula(nombre) {
//La función recibe un nombre y debe devolver el mismo que recibe pero con su primer letra en mayúscula
//ej: Recibe "mario" ----> Devuelve "Mario"
//Tu código:
//Como práctica lo resuelvo creando un callback
let capital = function letraC(nom_p) {
return `${nom_p['0'].toUpperCase()}${nom_p.slice(1)}`;
};
function eV(nombre_p, fcb_capi) {
return fcb_capi(nombre_p);
}
return eV(nombre, capital);
//Otra forma sin callback
//return `${nombre['0'].toUpperCase()}${nombre.slice(1)}`;
}
function invocarCallback(cb) {
// Invoca al callback `cb`
//Tu código:
return cb();
}
function operacionMatematica(n1, n2, cb) {
//Vamos a recibir una función que realiza una operación matemática como callback junto con dos números.
//Devolver el callback pasándole como argumentos los números recibidos.
//Tu código:
return cb(n1, n2);
}
function sumarArray(numeros, cb) {
// Suma todos los números enteros (int/integers) de un array ("numeros")
// Pasa el resultado a `cb`
// No es necesario devolver nada
//Tu código:
let sumaTodos = numeros.reduce(function cb_r(vacu, va/*, i, cualArreglo*/){
return vacu + va;
},
0 /*valor inicial de vacu*/
);
return cb(sumaTodos);
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 14 / 23
function forEach(array, cb) {
// Itera sobre la matriz "array" y pasa los valores al callback uno por uno
// Pista: Estarás invocando a `cb` varias veces (una por cada valor en la matriz)
//Tu código:
array.forEach(function cb_fE(elemento/*, indice*/){ return cb(elemento); });
}
function map(array, cb) {
// Crea un nuevo array
// Itera sobre cada valor en "array", pásalo a `cb` y luego ubicar el valor devuelto por `cb` en un nuevo array
// El nuevo array debe tener la misma longitud que el array del argumento
//Tu código:
let nuevoArray = [];
array.map(
function cb_m(element/*,index, verArray*/) {
nuevoArray.push(cb(element));
return element;
}/*,
thisArg*/
);
return nuevoArray;
}
function filter(array) {
//Filtrar todos los elementos del array que comiencen con la letra "a".
//Devolver un nuevo array con los elementos que cumplen la condición
//Tu código:
return array.filter( function cb_f(element) { return element['0']==='a'; } );
}
function deObjetoAmatriz(objeto){
// Escribe una función que convierta un objeto en una matriz, donde cada elemento representa
// un par clave-valor en forma de matriz.
//Ejemplo:
/*objeto({
D: 1,
B: 2,
C: 3
}) ➞ [["D", 1], ["B", 2], ["C", 3]]*/
//Escribe tu código aquí
let listaArrays = [];
for (let clave in objeto) {
let eArray = [];
eArray.push(clave, objeto[clave]);
listaArrays.push(eArray);
}
//Otra forma
//let listaArrays = Object.entries(objeto);
return listaArrays;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 15 / 23
function numberOfCharacters(string) {
//La función recibe un string. Recorre el srting y devuelve el caracter con el número de veces que aparece
//en formato par clave-valor.
//Ej: Recibe ---> "adsjfdsfsfjsdjfhacabcsbajda" || Devuelve ---> { a: 5, b: 2, c: 2, d: 4, f: 4, h:1, j: 4, s: 5 }
//Escribe tu código aquí
let result = {};
for (let valor of string) {
result[valor] = result.hasOwnProperty(valor) ? ++result[valor] : 1;
}
return result;
}
function capToFront(s) {
//Realiza una función que reciba como parámetro un string y mueva todas las letras mayúsculas
//al principio de la palabra.
//Ejemplo: soyHENRY -> HENRYsoy
//Escribe tu código aquí
let maymi = function fan(texto) {
let une=['',''];
//Con un for clásico
/*for (let p=0; p<texto.length; p++) {
if ( texto[p]===texto[p].toUpperCase() ) {
une[0] += texto[p];
} else {
une[1] += texto[p];
}
}*/
//Con forEach
Array.from(texto).forEach( function cb(letra) {
if ( letra===letra.toUpperCase() ) {
une[0] += letra;
} else {
une[1] += letra;
}
} );
return une;
};
return maymi(s)[0]+maymi(s)[1];
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 16 / 23
function asAmirror(str) {
//La función recibe una frase.
//Escribe una función que tome la frase recibida y la devuelva de modo tal que se pueda leer de izquierda a derecha
//pero con cada una de sus palabras invertidas, como si fuera un espejo.
//Ej: Recibe ---> "The Henry Challenge is close!" || Devuelve ---> "ehT yrneH egnellahC si !esolc"
//Escribe tu código aquí
let fr = function fn(frase) {
let cpr = [];
let cnvArray = frase.split(' ');
cnvArray.forEach( function cb(word) {
cpr.push(Array.from(word).reverse().join(''));
} );
return cpr.join(' ');
};
return fr(str);
}
function capicua(numero){
//Escribe una función, la cual recibe un número y determina si es o no capicúa.
//La misma debe retornar: "Es capicua" si el número se número que se lee igual de
//izquierda a derecha que de derecha a izquierda. Caso contrario retorna "No es capicua"
//Escribe tu código aquí
let numr = function nf(valorn) {
let snr = Array.from(valorn+'').reverse().join('');
return parseInt(snr);
};
return numero===numr(numero) ? 'Es capicua' : 'No es capicua';
}
function deleteAbc(cadena){
//Define una función que elimine las letras "a", "b" y "c" de la cadena dada
//y devuelva la versión modificada o la misma cadena, en caso de contener dichas letras.
//Escribe tu código aquí
let eli_abc = function nf(frase) {
let resul='';
Array.from(frase).forEach( function cb(letra) {
if (letra!=='a' && letra!=='b' && letra!=='c') {
resul += letra;
}
} );
return resul;
};
return eli_abc(cadena);
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 17 / 23
function sortArray(arr) {
//La función recibe una matriz de strings. Ordena la matriz en orden creciente de longitudes de cadena
//Ej: Recibe ---> ["You", "are", "beautiful", "looking"] || Devuelve ---> [“You", "are", "looking", "beautiful"]
//Escribe tu código aquí
let arrO = Array.from(arr);
let arrT = [];
for (let valor of arrO) {
arrT.push(valor.length);
}
let auxT, auxV;
for ( let c in arrT ) {
let cS = (parseInt(c)+1)+'';
for ( cS in arrT ) {
if (parseInt(cS) > parseInt(c)) {
if (arrT[c]>arrT[cS]) {
auxT = arrT[c];
auxV = arrO[c];
arrT[c] = arrT[cS];
arrO[c] = arrO[cS];
arrT[cS] = auxT;
arrO[cS] = auxV;
}
}
}
}
return arrO;
}
function buscoInterseccion(arreglo1, arreglo2){
//Existen dos arrays, cada uno con 5 números. A partir de ello, escribir una función que permita
//retornar un nuevo array con la intersección de ambos elementos. (Ej: [4,2,3] unión [1,3,4] = [3,4].
//Si no tienen elementos en común, retornar un arreglo vacío.
//Aclaración: los arreglos no necesariamente tienen la misma longitud
//Escribe tu código aquí
let ca1 = Array.from(arreglo1);
let ca2 = Array.from(arreglo2);
let ame, ama;
if (ca1.length<=ca2.length) {
ame = ca1;
ama = ca2;
} else {
ame = ca2;
ama =ca1;
}
let inters = [];
for (let valor of ame) {
if (ama.includes(valor)) {
inters.push(valor);
ama = ama.filter( (item) => item !== valor );
}
}
inters.sort( (a,b) => { return a-b; } ); /*<<--Ordeno, uso la manera directa*/
return inters;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 18 / 23
function stringMasLarga(strings) {
// La función llamada 'stringMasLarga', recibe como argumento un arreglo de strings llamado 'strings'
// y debe devolver el string más largo que hay en el arreglo (Es decir el de mayor cantidad de caracteres)
// Ej:
// stringMasLarga(['hi', 'hello', 'ni hao', 'guten tag']); debe retornar 'guten tag'
// stringMasLarga(['JavaScript', 'HTML', 'CSS']); debe retornar 'JavaScript'
// Tu código aca
let lenM=strings[0].length;
let strM=strings[0];
for (let p=1; p<strings.length;p++) {
if (strings[p].length>lenM) {
lenM=strings[p].length;
strM=strings[p];
}
}
return strM;
}
function buscarAmigo(amigos, nombre) {
// La funcion llamada 'buscarAmigo' recibe como argumento un array llamado 'amigos' que contiene
// en cada posición del arreglo un objeto que tiene como propiedades 'nombre' y 'edad'. También
// recibe un string llamado 'nombre'.
// Debe devolver el objeto cuya propiedad 'nombre' coincida con el string 'nombre' recibido por argumento.
// Ej:
// var amigos = [{ nombre: 'toni', edad: 33 } , { nombre: 'Emi', edad: 25 }];
// buscarAmigo(amigos, 'toni') debe devolver { nombre: 'toni', edad: 33 };
// Tu código aca:
let objEs = {};
amigos.forEach( function cb(v_obj) {
if (Object.keys(objEs).length===0) {
if (v_obj['nombre']===nombre) {
Object.assign(objEs, v_obj);
}
}
} );
return objEs;
}
function numeroSimetrico(num) {
// La funcion llamada 'numeroSimetrico' recibe como argumento un numero entero 'num'
// Esta devuelve true o false dependiendo de si el número es simétrico o no.
// Un número es simétrico cuando es igual a su reverso.
// Ej:
// numeroSimetrico(11711) devuelve true
// Tu código:
let snum = num+'';
let snum_rev = Array.from(snum).reverse().join('');
return snum===snum_rev;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 19 / 23
function pluck(array, propiedad) {
// La función llamada 'pluck' recibe como argumento un array de objetos llamado 'array' y el nombre de una
// propiedad.
// La función debe devolver un nuevo arreglo con solo los valores dentro de la propiedad recibida
// Ej:
// var productos = [{ name: 'TV LCD', price: 100}, { name: 'Computadora', price: 500 }]
// productos.pluck(productos, 'name') debería devolver ['TV LCD', 'Computadora']
// Pista: es una buena oportunidad para usar map.
// Tu código acá:
let arrayValores = [];
array.forEach( function cb(v_obj) {
arrayValores.push( v_obj[propiedad] );
} );
return arrayValores;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 20 / 23
function crearClasePersona() {
class Persona {
constructor(nombre, edad, hobbies, amigos) {
// El constructor de la clase Persona recibe nombre (string), edad (integer), hobbies (array de strings), amigos (array de objetos)
// Inicializar las propiedades de la persona con los valores recibidos como argumento
// Tu código aca:
this['nombre'] = nombre;
this['edad'] = edad;
this['hobbies'] = hobbies;
this['amigos'] = amigos;
}
addFriend(nombre, edad) {
// El método 'addFriend' recibe un string 'nombre' y un entero 'edad' y debe agregar un objeto:
// { nombre: nombre, edad: edad} al arreglo de amigos de la persona.
// No debe retornar nada.
// Tu código aca:
let newobj = {'nombre' : nombre, 'edad' : edad};
this['amigos'].push(newobj);
}
addHobby(hobby) {
// El método 'addHobby' recibe un string 'hobby' y debe agregarlo al arreglo de hobbies de la persona.
// No debe retornar nada.
// Tu código aca:
let newstr = hobby;
this['hobbies'].push(newstr);
}
getFriends() {
// El método 'getFriends' debe retornar un arreglo con sólo los nombres del arreglo de amigos
// de la persona.
// Ej:
// Suponiendo que la persona tiene estos amigos: [{nombre: 'martin', edad: 31},{nombre: 'toni', edad: 33}]
// persona.getFriends() debería devolver ['martin', 'toni']
// Tu código aca:
let arrayAmis = [];
this['amigos'].forEach( function cb(v_obj) {
arrayAmis.push(v_obj['nombre']);
} );
return arrayAmis;
}
getHobbies() {
// El método 'getHobbies' debe retornar un arreglo con los hobbies de la persona
// Ej:
// persona.getHobbies() debe devolver ['correr', 'dormir', 'nadar']
// Tu código aca:
return this['hobbies'];
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 21 / 23
getPromedioEdad() {
// El método 'getPromedioEdad' debe retornar el promedio de edad de los amigos de una persona
// Ej:
// Si la persona tuviera estos amigos:
// {
// amigos: [{
// nombre: 'toni',
// edad: 33,
// }, {
// nombre: 'Emi',
// edad: 25
// }]
// }
// persona.getPromedioEdad() debería devolver 29 ya que (33 + 25) / 2 = 29
// Tu código aca:
let edadesT = this['amigos'].reduce( function cb(acumu, v_obj) {
return acumu + v_obj['edad'];
}, 0 );
return edadesT/this['amigos'].length;
}
};
return Persona;
}
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 22 / 23
function filtrar(funcion) {
// Escribi una función filtrar en el prototipo de Arrays,
// que recibe una funcion (callback) que devuelve true o false.
// filtrar los elementos de ese arreglo en base al resultado de esa funcion
// comparadora, devolver un nuevo arreglo con los elementos filtrados.
// NO USAR LA FUNCION FILTER DE LOS ARREGLOS.
// ej:
// var productos = [{
// price: 100,
// name: 'tv'
// }, {
// price: 50,
// name: 'phone'
// }, {
// price: 30,
// name: 'lamp'
// }]
// productos.filtrar(function(p) {
// return p.price >= 50;
// }) => [{price: 100, name:'tv'}]
Array.prototype.filtrar = function nf(fcb) {
let filtrados = [];
for (let k in this) {
if ( fcb(this[k]) ) {
filtrados.push(this[k]);
}
}
return filtrados;
};
};
www.soyhenry.com - Prep-Course - Full Stack
Apuntes realizados por : www.bit.ly/adalsus 23 / 23

Más contenido relacionado

Similar a adalsus Prep-Course - soyHenry mis apuntes JS.pdf

Practicawebdelasesion3
Practicawebdelasesion3Practicawebdelasesion3
Practicawebdelasesion3Humberto1998
 
Semana03 prog ii
Semana03 prog iiSemana03 prog ii
Semana03 prog iiPropia
 
Funciones con arrays y vectores en c
Funciones con arrays y vectores en cFunciones con arrays y vectores en c
Funciones con arrays y vectores en cDiego Maxdj Chicaiza
 
Introduccion a C++
Introduccion a C++Introduccion a C++
Introduccion a C++LenHugo
 
Curso de swift lección 6, enumeraciones apple coding
Curso de swift lección 6, enumeraciones   apple codingCurso de swift lección 6, enumeraciones   apple coding
Curso de swift lección 6, enumeraciones apple codingRoggerza
 
Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenesanar26
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcionalJuan Rodríguez
 
métodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javamétodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javaHenry Upla
 
Ana maria morales 11 01
Ana maria morales 11 01Ana maria morales 11 01
Ana maria morales 11 01aniimorales
 
1.1 palabras reservadas para hacer un pseudocódigo
1.1 palabras reservadas para hacer un pseudocódigo1.1 palabras reservadas para hacer un pseudocódigo
1.1 palabras reservadas para hacer un pseudocódigoGioo
 
Fonciones de cadenas
Fonciones de cadenasFonciones de cadenas
Fonciones de cadenasmkbenitez
 
Funciones de cadena
Funciones de cadenaFunciones de cadena
Funciones de cadenaAlfredo Joya
 
Fonciones de cadenas
Fonciones de cadenasFonciones de cadenas
Fonciones de cadenasmkbenitez
 

Similar a adalsus Prep-Course - soyHenry mis apuntes JS.pdf (20)

Practicawebdelasesion3
Practicawebdelasesion3Practicawebdelasesion3
Practicawebdelasesion3
 
Logica de negocios
Logica de negociosLogica de negocios
Logica de negocios
 
Logica de negocios
Logica de negociosLogica de negocios
Logica de negocios
 
Semana03 prog ii
Semana03 prog iiSemana03 prog ii
Semana03 prog ii
 
Funciones con arrays y vectores en c
Funciones con arrays y vectores en cFunciones con arrays y vectores en c
Funciones con arrays y vectores en c
 
Introduccion a C++
Introduccion a C++Introduccion a C++
Introduccion a C++
 
Curso de swift lección 6, enumeraciones apple coding
Curso de swift lección 6, enumeraciones   apple codingCurso de swift lección 6, enumeraciones   apple coding
Curso de swift lección 6, enumeraciones apple coding
 
Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenes
 
Ana maria morales 11 01
Ana maria morales 11 01 Ana maria morales 11 01
Ana maria morales 11 01
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
 
Tutorial de php
Tutorial de phpTutorial de php
Tutorial de php
 
Semana9b Vbr
Semana9b VbrSemana9b Vbr
Semana9b Vbr
 
métodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javamétodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control java
 
Ana maria morales 11 01
Ana maria morales 11 01Ana maria morales 11 01
Ana maria morales 11 01
 
1.1 palabras reservadas para hacer un pseudocódigo
1.1 palabras reservadas para hacer un pseudocódigo1.1 palabras reservadas para hacer un pseudocódigo
1.1 palabras reservadas para hacer un pseudocódigo
 
Funciones
FuncionesFunciones
Funciones
 
Fonciones de cadenas
Fonciones de cadenasFonciones de cadenas
Fonciones de cadenas
 
Funciones de cadena
Funciones de cadenaFunciones de cadena
Funciones de cadena
 
Fonciones de cadenas
Fonciones de cadenasFonciones de cadenas
Fonciones de cadenas
 
Funciones
FuncionesFunciones
Funciones
 

Último

Poemas de Beatriz Giménez de Ory_trabajos de 6º
Poemas de Beatriz Giménez de Ory_trabajos de 6ºPoemas de Beatriz Giménez de Ory_trabajos de 6º
Poemas de Beatriz Giménez de Ory_trabajos de 6ºCEIP TIERRA DE PINARES
 
Material-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.ppt
Material-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.pptMaterial-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.ppt
Material-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.pptAntonioaraujo810405
 
Presentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos DigitalesPresentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos Digitalesnievesjiesc03
 
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)JonathanCovena1
 
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdfPresentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdfjuancmendez1405
 
LA GEOMETRÍA Y LOS SISTEMAS ANGULARES, APRENDER LEYENDO LA BIBLIA
LA GEOMETRÍA Y LOS SISTEMAS ANGULARES, APRENDER LEYENDO LA BIBLIALA GEOMETRÍA Y LOS SISTEMAS ANGULARES, APRENDER LEYENDO LA BIBLIA
LA GEOMETRÍA Y LOS SISTEMAS ANGULARES, APRENDER LEYENDO LA BIBLIASandra Mariela Ballón Aguedo
 
Presentación Pedagoía medieval para exposición en clases
Presentación Pedagoía medieval para exposición en clasesPresentación Pedagoía medieval para exposición en clases
Presentación Pedagoía medieval para exposición en clasesGustavo Cano
 
Proyecto integrador Vereda Cujacal Centro.pptx
Proyecto integrador Vereda Cujacal Centro.pptxProyecto integrador Vereda Cujacal Centro.pptx
Proyecto integrador Vereda Cujacal Centro.pptxvanessaavasquez212
 
📝 Semana 09 - Tema 01: Tarea - Redacción del texto argumentativo
📝 Semana 09 - Tema 01: Tarea - Redacción del texto argumentativo📝 Semana 09 - Tema 01: Tarea - Redacción del texto argumentativo
📝 Semana 09 - Tema 01: Tarea - Redacción del texto argumentativoharolbustamante1
 
ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)
ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)
ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)portafoliodigitalyos
 
22 Feria Gambetta, en Pedro Planas 29 mayo 2024 (1).docx
22 Feria Gambetta, en Pedro Planas 29 mayo 2024 (1).docx22 Feria Gambetta, en Pedro Planas 29 mayo 2024 (1).docx
22 Feria Gambetta, en Pedro Planas 29 mayo 2024 (1).docxpedroplanassilva498
 
ACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLA
ACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLAACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLA
ACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
Tema 14. Aplicación de Diagramas 26-05-24.pptx
Tema 14. Aplicación de Diagramas 26-05-24.pptxTema 14. Aplicación de Diagramas 26-05-24.pptx
Tema 14. Aplicación de Diagramas 26-05-24.pptxNoe Castillo
 
Proceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de PamplonaProceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de PamplonaEdurne Navarro Bueno
 
Creación WEB. Ideas clave para crear un sitio web
Creación WEB. Ideas clave para crear un sitio webCreación WEB. Ideas clave para crear un sitio web
Creación WEB. Ideas clave para crear un sitio webinformatica4
 
Evaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la OrganizaciónEvaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la OrganizaciónJonathanCovena1
 
Como construir los vínculos afectivos (Grupal)
Como construir los vínculos afectivos (Grupal)Como construir los vínculos afectivos (Grupal)
Como construir los vínculos afectivos (Grupal)portafoliodigitalyos
 
IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...
IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...
IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...Andrés Canale
 
Diagnostico del corregimiento de Junin del municipio de Barbacoas
Diagnostico del corregimiento de Junin del municipio de BarbacoasDiagnostico del corregimiento de Junin del municipio de Barbacoas
Diagnostico del corregimiento de Junin del municipio de Barbacoasadvavillacorte123
 

Último (20)

Poemas de Beatriz Giménez de Ory_trabajos de 6º
Poemas de Beatriz Giménez de Ory_trabajos de 6ºPoemas de Beatriz Giménez de Ory_trabajos de 6º
Poemas de Beatriz Giménez de Ory_trabajos de 6º
 
Material-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.ppt
Material-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.pptMaterial-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.ppt
Material-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.ppt
 
Presentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos DigitalesPresentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos Digitales
 
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
 
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdfPresentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
Presentación de medicina Enfermedades Fotográfico Moderno Morado (1).pdf
 
LA GEOMETRÍA Y LOS SISTEMAS ANGULARES, APRENDER LEYENDO LA BIBLIA
LA GEOMETRÍA Y LOS SISTEMAS ANGULARES, APRENDER LEYENDO LA BIBLIALA GEOMETRÍA Y LOS SISTEMAS ANGULARES, APRENDER LEYENDO LA BIBLIA
LA GEOMETRÍA Y LOS SISTEMAS ANGULARES, APRENDER LEYENDO LA BIBLIA
 
Lec. 08 Esc. Sab. Luz desde el santuario
Lec. 08 Esc. Sab. Luz desde el santuarioLec. 08 Esc. Sab. Luz desde el santuario
Lec. 08 Esc. Sab. Luz desde el santuario
 
Presentación Pedagoía medieval para exposición en clases
Presentación Pedagoía medieval para exposición en clasesPresentación Pedagoía medieval para exposición en clases
Presentación Pedagoía medieval para exposición en clases
 
Proyecto integrador Vereda Cujacal Centro.pptx
Proyecto integrador Vereda Cujacal Centro.pptxProyecto integrador Vereda Cujacal Centro.pptx
Proyecto integrador Vereda Cujacal Centro.pptx
 
📝 Semana 09 - Tema 01: Tarea - Redacción del texto argumentativo
📝 Semana 09 - Tema 01: Tarea - Redacción del texto argumentativo📝 Semana 09 - Tema 01: Tarea - Redacción del texto argumentativo
📝 Semana 09 - Tema 01: Tarea - Redacción del texto argumentativo
 
ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)
ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)
ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)
 
22 Feria Gambetta, en Pedro Planas 29 mayo 2024 (1).docx
22 Feria Gambetta, en Pedro Planas 29 mayo 2024 (1).docx22 Feria Gambetta, en Pedro Planas 29 mayo 2024 (1).docx
22 Feria Gambetta, en Pedro Planas 29 mayo 2024 (1).docx
 
ACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLA
ACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLAACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLA
ACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLA
 
Tema 14. Aplicación de Diagramas 26-05-24.pptx
Tema 14. Aplicación de Diagramas 26-05-24.pptxTema 14. Aplicación de Diagramas 26-05-24.pptx
Tema 14. Aplicación de Diagramas 26-05-24.pptx
 
Proceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de PamplonaProceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de Pamplona
 
Creación WEB. Ideas clave para crear un sitio web
Creación WEB. Ideas clave para crear un sitio webCreación WEB. Ideas clave para crear un sitio web
Creación WEB. Ideas clave para crear un sitio web
 
Evaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la OrganizaciónEvaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la Organización
 
Como construir los vínculos afectivos (Grupal)
Como construir los vínculos afectivos (Grupal)Como construir los vínculos afectivos (Grupal)
Como construir los vínculos afectivos (Grupal)
 
IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...
IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...
IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...
 
Diagnostico del corregimiento de Junin del municipio de Barbacoas
Diagnostico del corregimiento de Junin del municipio de BarbacoasDiagnostico del corregimiento de Junin del municipio de Barbacoas
Diagnostico del corregimiento de Junin del municipio de Barbacoas
 

adalsus Prep-Course - soyHenry mis apuntes JS.pdf

  • 1. Explicar los siguientes Conceptos: 1.1 Variables 1.2 Strings 1.3 Funciones (argumentos, return) 1.4 Declaraciones if 1.5 Valores booleanos (true, false) Explicaciones 1.1 Variables.- Son espacios que se reservan y que le nombramos con identificadores para luego asignarles, una o varias veces, valores diferentes. 1.2 Strings.- Son valores que también se les conoce como cadenas de texto, a estos String se los debe encerrar entre comillas simples o dobles. Ej. 'Calle #18' 1.3 Funciones.- Creamos nuestras funciones para que agrupen líneas de código y procesen u operen con los valores de los argumentos que se les pasa al momento de llamarlas por su nombre. También es posible crearlas hasta para que devuelvan tras su finalización un determinado Valor. 1.4 Declaraciones if.- Se usa el if acompañado de una condición(decisión) para que realice algo o no o continue. 1.5 Valores booleanos (true, false).- Los valores booleanos hacen o ayudan si llevan o bien un valor true(verdadero) o un valor false(falso). Explicar los siguientes Conceptos: 3.1a for 3.1b &&, ||, ! Explicaciones: 3.1a for.- La declaración for permite hacer repeticiones de las intrucciones o líneas de códigos que se escriban dentro de sus llaves, estas repeticiones se terminan cuando la condición da respuesta false. 3.1b &&, ||, !.- Estos símbolos trabajan con valores tipo boolean (true y false), es decir, los dos primeros símbolo entre valores booleanos y devuelve una respuesta booleana. Ejemplo: true && false su respuesta es false; Y el tercer símbolo un valor booleano a su derecha y asimismo devuelve otro valor booleano. Ejemplo: !true y devuelve false. Las respuestas, de los dos primeros símbolos se rigen de acuerdo a lo siguiente: Supongamos que tengo del lado izquierdo del símbolo una expresión que le llamaremos P; Y en el lado derecho una expresión que le llamaremos Q, entonces: P && Q Respuesta Si true && true true Si true && false false Si false && true false Si false && false false www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 1 / 23 Observación: Solo es true cuando ambos son true
  • 2. P || Q Respuesta Si true || true true Si true || false true Si false || true true Si false || false false Observación: Basta que uno de los operandos sea true para que la respuesta de true. Importante: Solo da como respuesta false cuando ambos son false. P !P Respuesta Si true !true false Si false !false true Observación: La negación del valor booleano da como respuesta el otro booleano. P !!P Respuesta Si true !!true true Si false !!false false Observación: La negación de la negación del valor booleano da como respuesta el mismo valor. En un archivo de texto separado que debes crear, escribe explicaciones de los siguientes conceptos como si se lo estuvieras explicando a un niño de 12 años. Hacer esto te ayudará a descubrir rápidamente cualquier agujero en tu comprensión. Arrays. Explicación: Los Arrays.- Son objetos que se los puede nombrar con un apodo y se les puede pasar muchos valores distintos separados por comas, dentro de corchetes, al momento de declararlos o despues a través de índices de posición o con sus funciones. Ejemplos: Crear un arreglo de 3 elementos en su declaracion: var lista = ['Ana',12,true]; Declarar un arreglo vacío o sin elementos: var lista02 = []; Al arreglo declarado, de apodo o nombre, lista02 añádale, en la posición 0, un valor string: lista02[0] = 'OCP0120'; Al mismo arreglo anterior añádele, al final, otro valor string con la funcion push(): lista02.push('AMP0238'); Al arreglo, declarado primerito, de apodo lista añádale, al inicio, un valor numérico con la función unshift(): lista.unshift(73456); Al arreglo, declarado primerito, de apodo lista añádale, en la posición 3, un arreglo vacío: lista[3] = []; www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 2 / 23
  • 3. 1. En un archivo de texto separado que debes crear, escribe explicaciones de los siguientes conceptos como si se lo estuvieras explicando a un niño de 12 años. Hacer esto te ayudará a descubrir rápidamente cualquier agujero en tu comprensión. * Objetos * Propiedades * Métodos * Bucle for…in * Notación de puntos vs notación de corchetes Explicaciones: Objetos.- El objeto almacena un conjunto o colección de varios tipos de datos que están ligados a un texto(apodo) clave para poder extraer su valor grabado, a este par << 'texto clave':value >> se le conoce como propiedad. A esta colección de tipos se la hace dentro de llaves y a su vez se les declara con un nombre o etiqueta para identificarlo. Ejemplo: let ecuador = { 'D T': 'Alfaro' , arqueros: ['Hernán Galindez', 'Moisés Ramírez', 'Alexander Domínguez'] , delanteros: ['Valencia','Estrada', 'Reasco', 'Rodríguez'] }; Observación: La etiqueta del objeto es ecuador y tiene 3 claves que son 'D T' , 'arqueros' y 'delanteros'. Propiedades.- Las propiedades de los objetos son cada uno de los pares << 'clave':valor >>, el valor puede ser de cualquier tipo, o sea string, number, boolean, null, undefined, puede hasta ser otro objeto y otras entidades. Por ejemplo del objeto anterior una propiedad es el par 'D T': 'Alfaro' Métodos.- Mencionamos en el concepto anterior otras entidades y una de estas son los métodos que no son más que funciones expresadas dentro del objeto y tratadas igual como propiedades. Ejemplo de una funcion como una propiedad más del objeto, aumentemos al objeto denominado ecuador un valor función con clave 'tactica'. ecuador['tactica'] = function nf() { return ['uno', 'uno', 'cuatro', 'tres', 'dos']; }; Bucle for…in.- Con este bucle podemos acceder a todos los elementos(propiedades) que agrupa el objeto, esto de acceder a todos los elementos se le conoce como recorrer el objeto completamente. Veamos como se lo usa: for (let propiedad in ecuador) { console.log(propiedad + ' : ' + ecuador[propiedad]); } Notación de puntos vs notación de corchetes.- Son convenciones o formas creadas por los desarrolladores para acceder a las propiedades del objeto, con la notación punto, usamos el símbolo punto para separar y que clave del objeto escojo para operar con su valor; en cambio con la notación de corchetes usamos los corchetes, de abrir y cerrar, para encerrar la clave(en string) con la que voy a operar con su valor. Ejemplo: Con Notación de punto accedo escribiendo así > ecuador.arqueros; Con Notación de corchetes accedo escribiendo así > ecuador['arqueros']; www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 3 / 23
  • 4. 1. En un archivo de texto separado que debes crear, escribe explicaciones de los siguientes conceptos como si se lo estuvieras explicando a un niño de 12 años. Hacer esto te ayudará a descubrir rápidamente cualquier agujero en tu comprensión. * prototype * Constructors (de Clases) Explicaciones: Prototype.- Son simplemente mecanismos por los que los objetos de Javascript heredan(les dan o les pasan) propiedades de otros objetos de Javascript y también es posible lo de la herencia porque todos pertenecen al objeto prototype que viene implementado en javascript. Ejemplo: Vamos a construir un objeto function que hará de Construcctor de propiedades para otros, crearemos la función constructora Car de esta manera, le pusimos inciando con una C en mayúscula a Car por acuerdo entre desarrolladores: function Car() { this.doors = 4; this.maxSpeed = 240; this.getSpeed = function gS() { return this.maxSpeed; } } Observación: function Car() { ... } es un objeto Prototype de javascript, por lo que le podemos adicionar una propiedad de la siguiente manera: Car.prototype.getSpeed = function pgS() { return 120; } Ahora vamos a crear un objeto que herede estas propiedades creadas, lo hacemos escribiendo lo de acontinuación: let carInstance = new Car(); Observación: Habrás notado que se ha generado un poliformismo, o sea existe una funcion getSpeed tanto en Car como en prototype, si hacemos una llamada en console.log de ese método primero lo llama si existiera en Car, en caso de no lo llama al de prototype, para este ejemplo mostraría por consola el valor de 240, para verificarlo escribamos: console.log(carInstance.getSpeed()); Si quisiéramos llamar al getSpeed de prototype, los haríamos escribiendo: console.log(carInstance.__proto__.getSpeed()); Constructors (de Clases).- Los construcctores de clases son justamente lo que hemos utilzado en el ejercicio anterior, o sea valiéndonos de la funcion constructora como también lo podemos hacer por intermedio del uso de la palabra reservada class, Construyamos como quedaría la clase usando class: class Car { constructor() { this.doors = 4; this.maxSpeed = 240; } getSpeed() { return this.maxSpeed; } } Ahora instanciemos esta Clase, lo hacemos igual con new, nos quedaría así: let instanciaCar = new Car(); Llamemos al método getSpeed, lo haré a través de un console.log: console.log(instanciaCar.getSpeed()); www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 4 / 23
  • 5. //Funcion constructora empieza la etiqueta con Mayúscula por convención function Car(make, model, year) { this.make = make; this.model = model; this.year = year; } //Añadir otra propiedad a la función constructora Car.prototype.color = 'color original'; const car1 = new Car('Eagle', 'Talon TSi', 1993); console.log(car1.color); // 'color original' car1.color = 'black'; console.log(car1.color); // 'black' console.log(Object.getPrototypeOf(car1).color); // 'color original' //Ver la propiedad superior color que cree car1.__proto__; //Ver la propiedad sobrecargada color que cree car1.color; //Solo el valor de la propiedad superior color car1.__proto__.color; //Otro ejemplo de herencia y poliformismo function Persona(edad) { this.edad = edad; } Persona.prototype.getEdad = function nf() { return 'tiene: ' + this.edad + ' años'; }; var per1 = new Persona(22); var per2 = new Persona(34); var per3 = new Persona(2335); //Hago poliformismo a objeto per3 per3['getEdad'] = function nf() { return this.edad/2; }; per1.getEdad(); per2.getEdad(); per3.getEdad(); www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 5 / 23
  • 6. //Otra forma de asemejarse a una clase(coje de otro objeto que hace de plantilla), definiendo las propiedades en prototype let Persona = { nombre: 'Por defecto', edad: 'Por defecto', getEdad: function pege() { return this.edad; } getNombre: function pngn() { return this.nombre; } } var juan = Object.create(Persona); juan.__proto__; //Ultima forma reciente class Persona { constructor(nombre, apellido) { this.nombre = nombre; this.apellido = apellido; } getNombre() { return this.nombre; } saludar() { console.log('Hola!' + this.nombre); } } var toni = new Persona('Toni', 'Tralice'); toni.saludar(); //Herencia class Empleado extends Persona { constructor (nombre, apellido, empleo, sueldo) { super(nombre, apellido); this.empleo = empleo; this.sueldo = sueldo; } } var toni = new Empleado('Toni', 'Tralice', 'Profesor', 100); toni.saludar(); www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 6 / 23
  • 7. FUNCIONES CALLBACK Cuando pasamos una función(objeto) como argumento y lo recibe el parámetro(objeto) de la otra función se la llama Cb(callback), es como que el parámetro es una referencia de la función-objeto que recibe. Ejercicio: //Declaramos y definimos, como expresión, la función objeto que hace un proceso. let espacea = function espa(texto_p) { if (typeof(texto_p)==='string' || typeof(texto_p)==='number') { if (typeof(texto_p)==='number') { texto_p += ''; } //si el parámetro es numérico lo transforma a string let vcespa=''; for (let c=0; c<texto_p.length; c++) { if (c<texto_p.length-1) { vcespa += texto_p[c] + ' '; } else { vcespa += texto_p[c]; } } return vcespa; } else { return 'No es un valor que se pueda espaciar'; } }; //Definimos la función que le da los insumos o es la que le pasa valores para que procese la otra función que declaramos y definimos. function esteV(valor_p, cb_espa_p) { return (cb_espa_p(valor_p)); } //Comprobamos si nos funciona el cb, con algunos valores esteV('hola', espacea); esteV(2335, espacea); esteV(true, espacea); esteV('a', espacea); www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 7 / 23
  • 8. EJERCICIOS: function colors(color) { //La función recibe un color. Devolver el string correspondiente: //En caso que el color recibido sea "blue", devuleve --> "This is blue" //En caso que el color recibido sea "red", devuleve --> "This is red" //En caso que el color recibido sea "green", devuleve --> "This is green" //En caso que el color recibido sea "orange", devuleve --> "This is orange" //Caso default: devuelve --> "Color not found" //Usar el statement Switch. switch (color) { case 'blue': case 'red': case 'green': case 'orange': return 'This is ' + color; default: return 'Color not found'; } } function esPrimo(numero) { // Devuelve "true" si "numero" es primo // De lo contrario devuelve "falso" // Pista: un número primo solo es divisible por sí mismo y por 1 // Pista 2: Puedes resolverlo usando un bucle `for` // Nota: Los números 0 y 1 NO son considerados números primos if (numero===1 || numero===0) { return false; } else { let Es=true; for (let divisor=2; divisor<Math.abs(numero); divisor++) { if (Math.abs(numero)%divisor===0) { Es=false; break; } } return Es; } } function agregarItemAlComienzoDelArray(array, elemento) { // Añade el "elemento" al comienzo del array // y devuelve el array // Pista: usa el método `.unshift` // Tu código: array.unshift(elemento); return array; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 8 / 23
  • 9. function numeroMasGrande(numeros) { // "numeros" debe ser una matriz de enteros (int/integers) // Devuelve el número más grande // Tu código: return Math.max(...numeros); } function mesesDelAño(array) { //Dado un array que contiene algunos meses del año desordenados, recorrer el array buscando los meses de // "Enero", "Marzo" y "Noviembre", guardarlo en nuevo array y retornarlo. //Si alguno de los meses no está, devolver: "No se encontraron los meses pedidos" // Tu código: let nuevoArray=[]; for (let c_a=0; c_a<array.length; c_a++) { if (array[c_a]==='Enero' || array[c_a]==='Marzo' || array[c_a]==='Noviembre') { let yaEsta=false; for (let c_nA=0;c_nA<nuevoArray.length;c_nA++) { if (array[c_a]===nuevoArray[c_nA]) { yaEsta=true; break; } } if (yaEsta===false) { nuevoArray.push(array[c_a]); } } } if (nuevoArray.length===3) { return nuevoArray; } else { return 'No se encontraron los meses pedidos'; } } function continueStatement(numero) { //Iterar en un bucle aumentando en 2 el numero recibido hasta un límite de 10 veces. //Guardar cada nuevo valor en un array. //Devolver el array //Cuando el número de iteraciones alcance el valor 5, no se suma en ese caso y se continua con la siguiente iteración //Pista: usá el statement 'continue' // Tu código: let array=[]; let enDos=numero; let lim; for (lim=1; lim<=10; lim++) { if (lim===5) { continue; } enDos += 2; array.push(enDos); } return array; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 9 / 23
  • 10. function crearGato (nombre, edad) { // Crear un nuevo objeto con la propiedad "nombre" y el valor definido como el argumento "nombre". // Agrega una propiedad al objeto con el nombre "edad" y usa el valor definido en el argumento "edad" // Agrega un método (funcion) llamado "meow" que devuelva el string "Meow!" // Devuelve el objeto // Tu código: let gato_obj = { 'nombre':nombre }; gato_obj['edad'] = edad; gato_obj['meow'] = function nf() { return 'Meow!'; }; return gato_obj; } function eliminarPropiedad (objeto, unaPropiedad) { // Elimina la propiedad de objeto cuyo nombre está pasado por el parametro unaPropiedad // tip: tenes que usar bracket notation // Devuelve el objeto // Tu código: delete objeto[unaPropiedad]; return objeto; } function nuevoUsuario (nombre, email, password) { // Crea un nuevo objeto con las propiedades coincidiendo con los argumentos que se pasan a la función // Devuelve el objeto // Tu código: let usuario_obj = {}; usuario_obj['nombre'] = nombre; usuario_obj['email'] = email; usuario_obj['password'] = password; return usuario_obj; } function tieneEmail (usuario) { // Devuelve "true" si el usuario tiene un valor definido para la propiedad "email" // De lo contrario, devuelve "false" // Tu código: // //Corrijo lo que se pide, se presta a una confusión el valor null -> SI es un valor que se puede colocar a una clave o sea //SI existe la clave pero según para el que realizó el ejercicio del test, NO existe. Debió haber redactado de otra manera //para pasar el test sin hacer trampa. Por decirles algo así debió redactar... // //... Devuelve true si en el objeto usuario existe la clave 'email' y false en caso de no existir(undefined) o de tener como valor el null. //Tú código: return typeof(usuario['email']) !== 'undefined' && usuario['email'] !== null; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 10 / 23
  • 11. function sumarLikesDeUsuario (usuario) { // "usuario" tiene una propiedad llamada "posts" que es un array // "posts" es un array de objetos "post" // Cada objeto "post" tiene una propiedad llamada "likes" que es un entero (int/integer) // Suma todos los likes de todos los objetos "post" // Devuelve la suma // Tu código: //usuario['posts'] es array //post['likes'] es number let totalLikes=0; for (let ck=0; ck<usuario['posts'].length; ck++) { totalLikes += usuario['posts'][ck]['likes']; } return totalLikes; } function agregarMetodoCalculoDescuento (producto) { // Agregar un método (función) al objeto "producto" llamado "calcularPrecioDescuento" // Este método debe multiplicar el "precio" del "producto" ("producto.precio" o "producto[precio]") y "porcentajeDeDescuento" para obtener el descuento // El método resta el descuento del precio y devuelve el precio con descuento // Devuelve el objeto "producto" al final de la función // Ejemplo: // producto.precio -> 20 // producto.porcentajeDeDescuento -> 0.2 (o simplemente ".2") // producto.calcularPrecioDescuento() -> 20 - (20 * 0.2) // Tu código: producto['calcularPrecioDescuento'] = function nf() { return this['precio'] - (this['precio']*this['porcentajeDeDescuento']); }; return producto; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 11 / 23
  • 12. function crearUsuario() { // Crea una Clase de ES6 o una función constructor llamada "Usuario" // Debe aceptar un objeto "opciones" con las propiedades "usuario", "nombre", "email" y "password" // En el `contructor`, define el usuario, el nombre, el email y la contraseña // El `contructor` debe tener un método llamado "saludar" en su `prototype` que devuelva una string 'Hola, mi nombre es {{nombre}}' // {{nombre}} debe ser el nombre definido en cada instancia // Devuelve la clase // Tu código: class Usuario { constructor(objOpc_p) { this.usuario = objOpc_p['usuario']; this.nombre = objOpc_p['nombre']; this.email = objOpc_p['email']; this.password = objOpc_p['password']; } } Usuario.prototype.saludar = function ups() { return `Hola, mi nombre es ${this.nombre}`; }; //let usuarioDeUsu = new Usuario({usuario:'001', nombre:'Adalberto', email:'adalsus@laei.com', password:'hy77667'}); //console.log(usuarioDeUsu.saludar()); return Usuario; } function agregarMetodoPrototype(Constructor) { // Agrega un método al Constructor del `prototype` // El método debe llamarse "saludar" y debe devolver la string "Hello World!" // Tu código: Constructor.prototype.saludar = function cps() { return 'Hello World!'; }; return Constructor; } function agregarStringInvertida() { // Agrega un método al prototype de String que devuelva la misma cadena de caracteres, pero invertida. // El método debe llamarse "reverse" // Ej: 'menem'.reverse() => menem // 'toni'.reverse() => 'inot' // Pista: Necesitarás usar "this" dentro de "reverse" String.prototype.reverse = function spr() { let texto = this; let alreves = ''; for (let i = texto.length - 1; i >= 0; i--) { alreves += texto[i]; } return alreves; }; return String; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 12 / 23
  • 13. // ---------------------------------------------------------------------------// //Crea el constructor de la clase "Persona" //Debe tener las propiedades: "nombre", "apellido", "edad" y "domicilio" //Debe tener un método llamado "detalle" que nos devuelve un objeto con las propiedades de la persona y sus valores. //Ej: { // Nombre: 'Juan', // Apellido: 'Perez', // Edad: 22, // Domicilio: 'Saavedra 123' // } class Persona { constructor(nombre, apellido, edad, domicilio) { // Crea el constructor: this['nombre'] = nombre; this['apellido'] = apellido; this['edad'] = edad; this['domicilio'] = domicilio; } detalle() { return {'Nombre':this['nombre'], 'Apellido':this['apellido'], 'Edad':this['edad'], 'Domicilio':this['domicilio']}; }; } function crearInstanciaPersona(nombre, apellido, edad, dir) { //Con esta función vamos a crear una nueva persona a partir de nuestro constructor de persona (creado en el ejercicio anterior) //Recibirá los valores "Juan", "Perez", 22, "Saavedra 123" para sus respectivas propiedades //Devolver la nueva persona creada let personaObj = new Persona(nombre, apellido, edad, dir); return personaObj; } function agregarMetodo() { //La función agrega un método "datos" a la clase Persona que toma el nombre y la edad de la persona y devuelve: //Ej: "Juan, 22 años" let Datos = { datos() { return `${this['nombre']}, ${this['edad']} años`; } }; Object.setPrototypeOf(Persona.prototype, Datos); /*//Otra forma Persona.prototype.datos = function ppd() { return `${this['nombre']}, ${this['edad']} años`; };*/ return Persona; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 13 / 23
  • 14. function mayuscula(nombre) { //La función recibe un nombre y debe devolver el mismo que recibe pero con su primer letra en mayúscula //ej: Recibe "mario" ----> Devuelve "Mario" //Tu código: //Como práctica lo resuelvo creando un callback let capital = function letraC(nom_p) { return `${nom_p['0'].toUpperCase()}${nom_p.slice(1)}`; }; function eV(nombre_p, fcb_capi) { return fcb_capi(nombre_p); } return eV(nombre, capital); //Otra forma sin callback //return `${nombre['0'].toUpperCase()}${nombre.slice(1)}`; } function invocarCallback(cb) { // Invoca al callback `cb` //Tu código: return cb(); } function operacionMatematica(n1, n2, cb) { //Vamos a recibir una función que realiza una operación matemática como callback junto con dos números. //Devolver el callback pasándole como argumentos los números recibidos. //Tu código: return cb(n1, n2); } function sumarArray(numeros, cb) { // Suma todos los números enteros (int/integers) de un array ("numeros") // Pasa el resultado a `cb` // No es necesario devolver nada //Tu código: let sumaTodos = numeros.reduce(function cb_r(vacu, va/*, i, cualArreglo*/){ return vacu + va; }, 0 /*valor inicial de vacu*/ ); return cb(sumaTodos); } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 14 / 23
  • 15. function forEach(array, cb) { // Itera sobre la matriz "array" y pasa los valores al callback uno por uno // Pista: Estarás invocando a `cb` varias veces (una por cada valor en la matriz) //Tu código: array.forEach(function cb_fE(elemento/*, indice*/){ return cb(elemento); }); } function map(array, cb) { // Crea un nuevo array // Itera sobre cada valor en "array", pásalo a `cb` y luego ubicar el valor devuelto por `cb` en un nuevo array // El nuevo array debe tener la misma longitud que el array del argumento //Tu código: let nuevoArray = []; array.map( function cb_m(element/*,index, verArray*/) { nuevoArray.push(cb(element)); return element; }/*, thisArg*/ ); return nuevoArray; } function filter(array) { //Filtrar todos los elementos del array que comiencen con la letra "a". //Devolver un nuevo array con los elementos que cumplen la condición //Tu código: return array.filter( function cb_f(element) { return element['0']==='a'; } ); } function deObjetoAmatriz(objeto){ // Escribe una función que convierta un objeto en una matriz, donde cada elemento representa // un par clave-valor en forma de matriz. //Ejemplo: /*objeto({ D: 1, B: 2, C: 3 }) ➞ [["D", 1], ["B", 2], ["C", 3]]*/ //Escribe tu código aquí let listaArrays = []; for (let clave in objeto) { let eArray = []; eArray.push(clave, objeto[clave]); listaArrays.push(eArray); } //Otra forma //let listaArrays = Object.entries(objeto); return listaArrays; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 15 / 23
  • 16. function numberOfCharacters(string) { //La función recibe un string. Recorre el srting y devuelve el caracter con el número de veces que aparece //en formato par clave-valor. //Ej: Recibe ---> "adsjfdsfsfjsdjfhacabcsbajda" || Devuelve ---> { a: 5, b: 2, c: 2, d: 4, f: 4, h:1, j: 4, s: 5 } //Escribe tu código aquí let result = {}; for (let valor of string) { result[valor] = result.hasOwnProperty(valor) ? ++result[valor] : 1; } return result; } function capToFront(s) { //Realiza una función que reciba como parámetro un string y mueva todas las letras mayúsculas //al principio de la palabra. //Ejemplo: soyHENRY -> HENRYsoy //Escribe tu código aquí let maymi = function fan(texto) { let une=['','']; //Con un for clásico /*for (let p=0; p<texto.length; p++) { if ( texto[p]===texto[p].toUpperCase() ) { une[0] += texto[p]; } else { une[1] += texto[p]; } }*/ //Con forEach Array.from(texto).forEach( function cb(letra) { if ( letra===letra.toUpperCase() ) { une[0] += letra; } else { une[1] += letra; } } ); return une; }; return maymi(s)[0]+maymi(s)[1]; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 16 / 23
  • 17. function asAmirror(str) { //La función recibe una frase. //Escribe una función que tome la frase recibida y la devuelva de modo tal que se pueda leer de izquierda a derecha //pero con cada una de sus palabras invertidas, como si fuera un espejo. //Ej: Recibe ---> "The Henry Challenge is close!" || Devuelve ---> "ehT yrneH egnellahC si !esolc" //Escribe tu código aquí let fr = function fn(frase) { let cpr = []; let cnvArray = frase.split(' '); cnvArray.forEach( function cb(word) { cpr.push(Array.from(word).reverse().join('')); } ); return cpr.join(' '); }; return fr(str); } function capicua(numero){ //Escribe una función, la cual recibe un número y determina si es o no capicúa. //La misma debe retornar: "Es capicua" si el número se número que se lee igual de //izquierda a derecha que de derecha a izquierda. Caso contrario retorna "No es capicua" //Escribe tu código aquí let numr = function nf(valorn) { let snr = Array.from(valorn+'').reverse().join(''); return parseInt(snr); }; return numero===numr(numero) ? 'Es capicua' : 'No es capicua'; } function deleteAbc(cadena){ //Define una función que elimine las letras "a", "b" y "c" de la cadena dada //y devuelva la versión modificada o la misma cadena, en caso de contener dichas letras. //Escribe tu código aquí let eli_abc = function nf(frase) { let resul=''; Array.from(frase).forEach( function cb(letra) { if (letra!=='a' && letra!=='b' && letra!=='c') { resul += letra; } } ); return resul; }; return eli_abc(cadena); } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 17 / 23
  • 18. function sortArray(arr) { //La función recibe una matriz de strings. Ordena la matriz en orden creciente de longitudes de cadena //Ej: Recibe ---> ["You", "are", "beautiful", "looking"] || Devuelve ---> [“You", "are", "looking", "beautiful"] //Escribe tu código aquí let arrO = Array.from(arr); let arrT = []; for (let valor of arrO) { arrT.push(valor.length); } let auxT, auxV; for ( let c in arrT ) { let cS = (parseInt(c)+1)+''; for ( cS in arrT ) { if (parseInt(cS) > parseInt(c)) { if (arrT[c]>arrT[cS]) { auxT = arrT[c]; auxV = arrO[c]; arrT[c] = arrT[cS]; arrO[c] = arrO[cS]; arrT[cS] = auxT; arrO[cS] = auxV; } } } } return arrO; } function buscoInterseccion(arreglo1, arreglo2){ //Existen dos arrays, cada uno con 5 números. A partir de ello, escribir una función que permita //retornar un nuevo array con la intersección de ambos elementos. (Ej: [4,2,3] unión [1,3,4] = [3,4]. //Si no tienen elementos en común, retornar un arreglo vacío. //Aclaración: los arreglos no necesariamente tienen la misma longitud //Escribe tu código aquí let ca1 = Array.from(arreglo1); let ca2 = Array.from(arreglo2); let ame, ama; if (ca1.length<=ca2.length) { ame = ca1; ama = ca2; } else { ame = ca2; ama =ca1; } let inters = []; for (let valor of ame) { if (ama.includes(valor)) { inters.push(valor); ama = ama.filter( (item) => item !== valor ); } } inters.sort( (a,b) => { return a-b; } ); /*<<--Ordeno, uso la manera directa*/ return inters; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 18 / 23
  • 19. function stringMasLarga(strings) { // La función llamada 'stringMasLarga', recibe como argumento un arreglo de strings llamado 'strings' // y debe devolver el string más largo que hay en el arreglo (Es decir el de mayor cantidad de caracteres) // Ej: // stringMasLarga(['hi', 'hello', 'ni hao', 'guten tag']); debe retornar 'guten tag' // stringMasLarga(['JavaScript', 'HTML', 'CSS']); debe retornar 'JavaScript' // Tu código aca let lenM=strings[0].length; let strM=strings[0]; for (let p=1; p<strings.length;p++) { if (strings[p].length>lenM) { lenM=strings[p].length; strM=strings[p]; } } return strM; } function buscarAmigo(amigos, nombre) { // La funcion llamada 'buscarAmigo' recibe como argumento un array llamado 'amigos' que contiene // en cada posición del arreglo un objeto que tiene como propiedades 'nombre' y 'edad'. También // recibe un string llamado 'nombre'. // Debe devolver el objeto cuya propiedad 'nombre' coincida con el string 'nombre' recibido por argumento. // Ej: // var amigos = [{ nombre: 'toni', edad: 33 } , { nombre: 'Emi', edad: 25 }]; // buscarAmigo(amigos, 'toni') debe devolver { nombre: 'toni', edad: 33 }; // Tu código aca: let objEs = {}; amigos.forEach( function cb(v_obj) { if (Object.keys(objEs).length===0) { if (v_obj['nombre']===nombre) { Object.assign(objEs, v_obj); } } } ); return objEs; } function numeroSimetrico(num) { // La funcion llamada 'numeroSimetrico' recibe como argumento un numero entero 'num' // Esta devuelve true o false dependiendo de si el número es simétrico o no. // Un número es simétrico cuando es igual a su reverso. // Ej: // numeroSimetrico(11711) devuelve true // Tu código: let snum = num+''; let snum_rev = Array.from(snum).reverse().join(''); return snum===snum_rev; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 19 / 23
  • 20. function pluck(array, propiedad) { // La función llamada 'pluck' recibe como argumento un array de objetos llamado 'array' y el nombre de una // propiedad. // La función debe devolver un nuevo arreglo con solo los valores dentro de la propiedad recibida // Ej: // var productos = [{ name: 'TV LCD', price: 100}, { name: 'Computadora', price: 500 }] // productos.pluck(productos, 'name') debería devolver ['TV LCD', 'Computadora'] // Pista: es una buena oportunidad para usar map. // Tu código acá: let arrayValores = []; array.forEach( function cb(v_obj) { arrayValores.push( v_obj[propiedad] ); } ); return arrayValores; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 20 / 23
  • 21. function crearClasePersona() { class Persona { constructor(nombre, edad, hobbies, amigos) { // El constructor de la clase Persona recibe nombre (string), edad (integer), hobbies (array de strings), amigos (array de objetos) // Inicializar las propiedades de la persona con los valores recibidos como argumento // Tu código aca: this['nombre'] = nombre; this['edad'] = edad; this['hobbies'] = hobbies; this['amigos'] = amigos; } addFriend(nombre, edad) { // El método 'addFriend' recibe un string 'nombre' y un entero 'edad' y debe agregar un objeto: // { nombre: nombre, edad: edad} al arreglo de amigos de la persona. // No debe retornar nada. // Tu código aca: let newobj = {'nombre' : nombre, 'edad' : edad}; this['amigos'].push(newobj); } addHobby(hobby) { // El método 'addHobby' recibe un string 'hobby' y debe agregarlo al arreglo de hobbies de la persona. // No debe retornar nada. // Tu código aca: let newstr = hobby; this['hobbies'].push(newstr); } getFriends() { // El método 'getFriends' debe retornar un arreglo con sólo los nombres del arreglo de amigos // de la persona. // Ej: // Suponiendo que la persona tiene estos amigos: [{nombre: 'martin', edad: 31},{nombre: 'toni', edad: 33}] // persona.getFriends() debería devolver ['martin', 'toni'] // Tu código aca: let arrayAmis = []; this['amigos'].forEach( function cb(v_obj) { arrayAmis.push(v_obj['nombre']); } ); return arrayAmis; } getHobbies() { // El método 'getHobbies' debe retornar un arreglo con los hobbies de la persona // Ej: // persona.getHobbies() debe devolver ['correr', 'dormir', 'nadar'] // Tu código aca: return this['hobbies']; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 21 / 23
  • 22. getPromedioEdad() { // El método 'getPromedioEdad' debe retornar el promedio de edad de los amigos de una persona // Ej: // Si la persona tuviera estos amigos: // { // amigos: [{ // nombre: 'toni', // edad: 33, // }, { // nombre: 'Emi', // edad: 25 // }] // } // persona.getPromedioEdad() debería devolver 29 ya que (33 + 25) / 2 = 29 // Tu código aca: let edadesT = this['amigos'].reduce( function cb(acumu, v_obj) { return acumu + v_obj['edad']; }, 0 ); return edadesT/this['amigos'].length; } }; return Persona; } www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 22 / 23
  • 23. function filtrar(funcion) { // Escribi una función filtrar en el prototipo de Arrays, // que recibe una funcion (callback) que devuelve true o false. // filtrar los elementos de ese arreglo en base al resultado de esa funcion // comparadora, devolver un nuevo arreglo con los elementos filtrados. // NO USAR LA FUNCION FILTER DE LOS ARREGLOS. // ej: // var productos = [{ // price: 100, // name: 'tv' // }, { // price: 50, // name: 'phone' // }, { // price: 30, // name: 'lamp' // }] // productos.filtrar(function(p) { // return p.price >= 50; // }) => [{price: 100, name:'tv'}] Array.prototype.filtrar = function nf(fcb) { let filtrados = []; for (let k in this) { if ( fcb(this[k]) ) { filtrados.push(this[k]); } } return filtrados; }; }; www.soyhenry.com - Prep-Course - Full Stack Apuntes realizados por : www.bit.ly/adalsus 23 / 23