Más objetos

function Empleado(nombre, sueldo) {
    this.nombre = nombre;
    this.sueldo = sueldo;
    this.empresa = "Netmind";
    this.departamento = "";
    this.sueldoNeto = function () {
        return this.sueldo * (1-this.irpf());
    };
    this.irpf = function () {
        if (this.sueldo < 1500) {
            return .2;
        }
        if (this.sueldo >= 1500 && this.sueldo < 3000) {
            return .3;
        }
        return .4;
    };
    this.neto=function(){
      var sueldo=this.sueldo;
      var irpf=this.irpf();
      var neto=sueldo-sueldo*irpf;
      return neto;
    };
}

function Empresa(nombre) {
    this.nombre = nombre;
    this.jefe = new Empleado("Jefe", 3000);
    this.empleados = [];
    for (var i = 0; i < 10; i++) {
        this.empleados.push(new Empleado("Empleado" + i, 1400 + i * 100));
    }

    this.comerciales = [];
    for (var i = 0; i < 3; i++) {
        var e = new Empleado("Comercial" + i, 1400 + i * 100);
        e.departamento = "Comercial";
        this.comerciales.push(e);
    }
}

function Holding(emp1, emp2) {
    this.empresas = [emp1, emp2];
}
var netmind = new Empresa("Netmind");
var activity = new Empresa("Activity");

var conglomerado = new Holding(netmind, activity);

var ana = new Empleado("Ana Pérez", 1500);
var juan = new Empleado("Juan Pi", 1400);

var empleados = [];
for (var i = 0; i < 10; i++) {
    empleados.push(new Empleado("Empleado" + i, 1400 + i * 100));
}

String.prototype.oracion = function () {
    return this.valueOf().charAt(0).toUpperCase() + this.valueOf().slice(1).toLowerCase();
}

function Producto(nombre,precio){
    this.nombre=nombre;
    this.precio=precio;
    this.iva=.21;
    this.referencia=("0000" + Math.floor(Math.random()*10000)).slice(-4);
    this.pvp=function(){
        return this.precio*(1+this.iva);
    }
    this.pvpConDescuento=function(descuento){
        return this.pvp()*(1-descuento/100);
    }
}

var tornillo = new Producto("tornillo",100);

Ejemplos objetos

var pepe = {
firstName:"John",
lastName:"Doe",
age:50,
eyeColor:"blue",
completo:function(){
return this.firstName+" "+this.lastName;
},
mayorEdad:function(){
return this.age>=18;
}
};

function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}

var ana=new Person("Ana","Pi",40,"azul")

var juan=new Person("Juan","Perez",50,"marrón")
for (var p in pepe){
if (typeof pepe[p]!=="function"){
console.log(p+" - "+pepe[p]);
}
else{
console.log(p+" - "+pepe[p]());
}
}

function normal(){
return "Hola";
}

var noNormal=function(){
return "adios";
}

noNormal=function(){
return "funcion nueva";
}

Ejemplos funciones

function tipoOracion(cadena) {
var primera = cadena.charAt(0);
var resto = cadena.slice(1);
return primera.toUpperCase() + resto.toLowerCase();
}

function tipoTitulo(cadena) {
var palabras = cadena.split(" ");
for (var i = 0; i < palabras.length; i++) {
palabras[i] = tipoOracion(palabras[i]);
}
return palabras.join(" ");
}

function tipoTitulo2(cadena) {
var palabras = cadena.split(" ");
var res = "";
for (var i = 0; i < palabras.length; i++) {
res += tipoOracion(palabras[i]) + " ";
}
return res.trim();
}
function tipoTitulo3(cadena) {
var res = cadena.charAt(0).toUpperCase();
for (var i = 1; i < cadena.length; i++) {
if (cadena.charAt(i - 1) === " ") {
res += cadena.charAt(i).toUpperCase();
} else {
res += cadena.charAt(i).toLowerCase();

}
}
return res;
}

function tipoHipster(cadena) {
var res = "";
for (var i = 0; i < cadena.length; i++) {
var letra = cadena.charAt(i);
if (esVocal(letra)) {
res += letra.toUpperCase();
} else {
res += letra.toLowerCase();
}
}
return res;
}

function tipoHipster2(cadena) {
var letras = cadena.split("");
for (var i = 0; i < letras.length; i++) {
if (esVocal(letras[i])) {
letras[i] = letras[i].toUpperCase();
} else {
letras[i] = letras[i].toLowerCase();
}
}
return letras.join('');
}

function esVocal(letra) {
var vocales = "aeiouáéíóúàèìòùü";
return vocales.indexOf(letra.toLowerCase()) !== -1;
}

function eliminarVocales(cadena) {
var res = "";
for (var i = 0; i < cadena.length; i++) {
var letra = cadena.charAt(i);
if (!esVocal(letra)) {
res += letra;
}
}
return res;
}
function eliminarVocalesReg(cadena) {
return cadena.replace(/[aeiouáéíóúàèìòùü]/gi, "");
}

function palabraMasLarga(cadena) {
var palabras = cadena.split(" ");
var larga = "";
for (var i = 0; i < palabras.length; i++) {
if (palabras[i].length > larga.length) {
larga = palabras[i];
}
}
return larga;
}

function palabraMasLargaSort(cadena) {
var palabras = cadena.split(" ");
palabras.sort(function (a, b) {
return b.length - a.length;
});
return palabras[0];
}

function trimTotal(cadena) {
cadena = cadena.trim();
var res = cadena.charAt(0);
for (var i = 1; i < cadena.length; i++) {
if (!(cadena.charAt(i) === " " && cadena.charAt(i - 1) === " ")) {
res += cadena.charAt(i);
}
}
return res;
}

function trimTotalArr(cadena) {
var palabras = cadena.split(" ");
for (var i = palabras.length - 1; i >= 0; i--) {
if (palabras[i] === "") {
palabras.splice(i, 1);
}
}
return palabras.join(" ");
}

function trimTotalReplace(cadena) {
while (cadena.indexOf(" ") !== -1) {
cadena = cadena.replace(/ /g, " ");
}
return cadena.trim();
}
function trimTotalReg(cadena) {
cadena = cadena.replace(/[ ]+/g, " ");
return cadena.trim();
}

Ejemplos funciones cadenas

function tipoOracion(cadena) {
var primera = cadena.charAt(0);
var resto = cadena.slice(1);
return primera.toUpperCase() + resto.toLowerCase();
}

function tipoTitulo(cadena) {
var palabras = cadena.split(" ");
for (var i = 0; i < palabras.length; i++) {
palabras[i] = tipoOracion(palabras[i]);
}
return palabras.join(" ");
}

function tipoTitulo2(cadena) {
var palabras = cadena.split(" ");
var res = "";
for (var i = 0; i < palabras.length; i++) {
res += tipoOracion(palabras[i]) + " ";
}
return res.trim();
}
function tipoTitulo3(cadena) {
var res = cadena.charAt(0).toUpperCase();
for (var i = 1; i < cadena.length; i++) {
if (cadena.charAt(i - 1) === " ") {
res += cadena.charAt(i).toUpperCase();
} else {
res += cadena.charAt(i).toLowerCase();

}
}
return res;
}

function tipoHipster(cadena){
var res="";
for(var i=0;i<cadena.length;i++){
var letra=cadena.charAt(i);
if (esVocal(letra)){
res+=letra.toUpperCase();
}
else{
res+=letra.toLowerCase();
}
}
return res;
}

function tipoHipster2(cadena){
var letras=cadena.split("");
for(var i=0;i<letras.length;i++){
if (esVocal(letras[i])){
letras[i]=letras[i].toUpperCase();
}
else{
letras[i]=letras[i].toLowerCase();
}
}
return letras.join('');
}

function esVocal(letra){
var vocales="aeiouáéíóúàèìòùü";
return vocales.indexOf(letra.toLowerCase())!==-1;
}

Resolución de problemas

Pensar

¿Qué es lo que me piden? ¿Cómo lo resolvería? ¿Qué estrategias tengo para acercarme al problema? ¿Qué camino puedo recorrer para llegar a la meta?

Algoritmo

Una vez tengo una estrategia debo especificarla en un algoritmo. Son los pasos mecánicos, bien definidos, que me llevarán a la resolución de problemas.

Implementación

Traducir el algoritmo abstracto al lenguaje que estoy utilizando. Dependiendo de las características de éste y de nuestros conocimientos el programa puede ser más sencillo o más complicado.


Divide y vencerás

Todo problema puede dividirse en problemas más pequeños. Siempre es una buena estrategia definir las partes del problema mayor y enfrentarse a retos más sencillos.

Primero lo más sencillo

Hagamos en primer lugar los requisitos más sencillos y que no nos causen problemas, nos irán haciendo una estructura que nos facilitará la resolución global.

Soluciones parciales

Una buena estrategia es ir probando diferentes soluciones que resuelven parcialmente el problema y nos van acercando a la solución final.

Internet

Siempre se puede usar como fuente de inspiración, pero ¡cuidado! sabiendo qué buscamos y cómo utilizarlo.

Cesta compra 2.0

 <input type="text" id="producto" >
 <input type="button" id="compra" value="Comprar">
 <input type="button" id="ordenar" value="Ordenar">
 <input type="button" id="ordenar2" value="Ordenar desc">
 <div id="cesta"></div>
var cesta = [];

document.getElementById("compra").addEventListener("click", comprar);
document.getElementById("ordenar").addEventListener("click", function () {
ordenar(1);
});
document.getElementById("ordenar2").addEventListener("click", function () {
ordenar(2);
});
document.getElementById("producto").addEventListener("keypress", tecla);

function comprar() {
var producto = document.getElementById('producto').value;
if (producto.trim() !== "" && cesta.indexOf(producto) === -1) {
cesta.push(producto);
document.getElementById('producto').value = "";
mostrar();
} else {
alert("Producto incorrecto o repetido");
}
}
function tecla(event) {

if (event.keyCode === 13 || event.key === "+") {
comprar();
event.preventDefault();
}
if (event.key >= "0" && event.key <= "9") {
event.preventDefault();
}
}
function ordenar(tipo) {
cesta.sort();
if (tipo === 2) {
cesta.reverse();
}
mostrar();
}

function mostrar() {
var resultado = document.getElementById('cesta');
resultado.innerHTML = "";
for (var i = 0; i < cesta.length; i++) {
var parrafo = document.createElement("p");
parrafo.innerHTML = i + ".- " + cesta[i];
var boton = document.createElement("button");
boton.innerHTML = "X";
boton.id=i;
boton.addEventListener("click", function () {
borrar(this.id);
})
parrafo.appendChild(boton);
resultado.appendChild(parrafo);

}
}

function borrar(i) {
cesta.splice(i, 1);
mostrar();
}

Ejercicios fechas

 Mes:<input type="text" id="mes">
 Año:<input type="text" id="anyo">
 Festivos:<input type="text" id="festivos">
 <input type="button" onclick="calcular()" value="Calcular">
 <input type="button" onclick="total()" value="Total">
function calcular() {
//Obtener los valores de las cajas de texto
var mes = document.getElementById('mes').value;
var anyo = document.getElementById('anyo').value;

//Poner el resultado en el input festivos
document.getElementById('festivos').value = festivos(mes, anyo);

}

//Nos devuelve los años con más festivos
function maximoAnual(anyoDesde, anyoHasta) {
var anyo = [];
var maximo = 0;
for (var i = anyoDesde; i <= anyoHasta; i++) {
var t = total(i);
if (t === maximo) {
anyo.push(i);
}
if (t > maximo) {
anyo = [i];
maximo = t;
}
}
return [anyo, maximo];
}

//nos devuelve los meses con más festivos de un año
function mesesFestivos(anyo) {
var mes = [];
var maximo = 0;
for (var i = 1; i <= 12; i++) {
var t = festivos(i,anyo);
if (t === maximo) {
mes.push(i);
}
if (t > maximo) {
mes = [i];
maximo = t;
}
}
return [mes, maximo];
}
function total(anyo) {
var total = 0;
for (var i = 1; i <= 12; i++) {
total += festivos(i, anyo);
}
//Poner el resultado en el input festivos
return total;
}
function festivos(mes, anyo) {
var cont = 0;
var diasMes = daysInMonth(mes, anyo);
//Recorro el mes para buscar sábados y domingos
for (var i = 1; i <= diasMes; i++) {
var fecha = new Date(anyo, mes - 1, i);
//Si es sábado o domingo sumar uno al contador
if (fecha.getDay() === 6 || fecha.getDay() === 0) {
cont++;
}
}
return cont;
}

function daysInMonth(month, year) {
return new Date(year, month, 0).getDate();
}


Cesta de la compra

  <input type="text" id="producto" onkeyup="tecla(event)">
 <input type="button" onclick="comprar()" id="compra" value="Comprar">
 <input type="button" onclick="ordenar()" id="ordenar" value="Ordenar">
 <div id="cesta"></div>
var cesta = [];
function comprar() {
 var producto = document.getElementById('producto').value;
 if (producto.trim() !== "" && cesta.indexOf(producto) === -1) {
 cesta.push(producto);
 mostrar();
 } else {
 alert("Producto incorrecto o repetido");
 }
}
function tecla(event){
 if (event.keyCode===13){
 comprar();
 document.getElementById('producto').value="";
 }
}
function ordenar() {
 cesta.sort();
 mostrar();
}
function mostrar() {
 var resultado = document.getElementById('cesta');
 resultado.innerHTML = "";
 for (var i = 0; i < cesta.length; i++) {
 resultado.innerHTML += "<p>" + i + ".- "
 + cesta[i] +
 " <input type='button' value='X' onclick='borrar(" + i + ")'>" + "</p>";
 }
}
function borrar(i) {
 cesta.splice(i, 1);
 mostrar();
}