JavaScript
Dia 01
1. Pirâmide iluminatti
Escreva uma função gerarPiramide(niveis)
que imprime com console.log
uma pirâmide com uma quantidade de níveis informada por parâmetro, utilizando os caracteres R$
. Ex:
gerarPiramide(9);
R$
R$R$
R$R$R$
R$R$R$R$
R$R$R$R$R$
R$R$R$R$R$R$
R$R$R$R$R$R$R$
R$R$R$R$R$R$R$R$
R$R$R$R$R$R$R$R$R$
2. Diglett dig, trio trio trio
Escreva uma função diglettDig()
que, utilizando console.log
, imprime todos os números de 1 até 100, com duas exceções:
- quando o número for divisível por 3, imprima 'Diglett dig' invés do número, e
- quando o número for divisível por 5 (e não por 3), imprima 'trio trio trio' invés do número.
Após ter essa lógica funcionando, altere a função para imprimir 'Diglett dig, trio trio trio' para números que são divisíveis tanto por 3 quanto por 5 (e que continue imprimindo 'Diglett dig' ou 'trio trio trio' para os números divisíveis apenas por 3 ou 5).
3. Funções por parâmetro!?
Crie uma função chamada find
que recebe um array e uma função por parâmetro. A função (passada por parâmetro) deverá informar um critério de busca de elementos dentro do array e a função find utilizará este critério para retornar todos elementos do array que encontram-se dentro dele. NÃO SURTEM! Exemplos:
var maiorIgualADois = function(elemento) {
return elemento >= 2;
};
console.log(find([ 1, 2, 3 ], maiorIgualADois));
// [ 2, 3 ]
console.log(find([ 'a', 5, null, false, 'false' ], function(elem) {
return typeof elem === 'string';
}));
// [ 'a', 'false' ]
console.log(find([ { nome: 'a' }, { nome: 'b' } ], function(elem) {
return typeof elem.nome === 'c';
}));
// []
Bônus
O que acontecerá se você informar um valor que não seja uma função no segundo parâmetro?
Exemplo:
var maiorIgualADois = 'maior igual ou a dois';
console.log(find([ 1, 2, 3 ], maiorIgualADois));
Altere a implementação para apenas executar o segundo parâmetro caso ele seja uma função.
4. Você sabe subtrair?
Crie uma função chamada subtrair
que realiza a subtração de dois números em duas chamadas de funções diferentes. NÃO SURTEM! Exemplo:
console.log(subtrair(2)(1)); // 1
console.log(subtrair(0)(0)); // 0
console.log(subtrair(-1)(2)); // -3
5. Igualdade recursiva
Escreva uma função iguais
que recebe dois parâmetros e retorna true
apenas se os valores dos parâmetros forem iguais ou se eles forem objetos com as mesmas propriedades com valores iguais e assim recursivamente (ou seja, em até vários níveis de propriedades dentro dos objetos).
Exemplos:
var obj = { a: { a: 'a' }, b: 2 };
console.log(iguais(obj, obj)); // true
console.log(iguais(obj, { a: 1, b: 2 })); // false
console.log(iguais(obj, { a: { a: 'a' }, b: 2 })); // true
console.log(iguais({ a: 1 }, { b: 1 })); // false
var goku = {
nivel: 'SSJ4',
golpes: [ { nome: 'kamehameha', dano: 45 }, { nome: 'genki-dama', dano: 99 } ],
nome: 'Goku',
}, sonGoku = {
nome: 'Goku',
nivel: 'SSJ4',
golpes: [ { nome: 'kamehameha', dano: 45 }, { nome: 'genki-dama', dano: 99 } ]
};
console.log(iguais(goku, sonGoku)); // true
console.log(iguais({ a: 1 }, { a: 1, b: 2 })); // false
goku = {
nivel: 'SSJ4',
golpes: [ { nome: 'kamehameha', dano: { precisao: 'milhar', valor: 56 } }, { nome: 'genki-dama', dano: 99 } ],
nome: 'Goku',
}, sonGoku = {
nivel: 'SSJ4',
golpes: [ { nome: 'kamehameha', dano: { precisao: 'milhar', valor: 56 } }, { nome: 'genki-dama', dano: 99 } ],
nome: 'Goku',
};
console.log(iguais(goku, sonGoku)); // true
goku = {
nome: 'Goku',
nivel: 'SSJ4',
golpes: [
{ nome: 'kamehameha', dano: 45 }, { nome: 'genki-dama', dano: 99 }
]
}, sonGoku = {
nome: 'Goku',
nivel: 'SSJ4',
golpes: [
{ nome: 'genki-dama', dano: 99 }, { nome: 'kamehameha', dano: 45 }
]
};
console.log(iguais(goku, sonGoku)); // false
Dicas:
- Utilize o operador
typeof
para saber que tipo de comparação deve ser feita. Se os dois objetos tiverem typeof com retorno'object'
, deve ser feita a comparação em todas suas propriedades e de forma recursiva. - Por motivos macabros,
typeof null
retornará'object'
. Trate este caso e seja feliz :)
6. Ctrl+Copyright
Escreva uma função ctrlC
que recebe um parâmetro e realiza a cópia de todos seus valores e retorne o resultado. NÃO SURTEM!! Exemplos:
var origem = { a: '1' };
var destino = ctrlC(origem);
console.log(destino);
// { a: '1' }
console.log(origem === destino);
// false
console.log(iguais(origem, destino));
// true
destino = ctrlC({ a: [ { b: '1', c: '2' }, { d: false }, { e: function() { return 3; } } ] });
console.log(destino.a[2].e());
// 3
Observação: note que os objetos não são idênticos (tanto == quanto === retornam false, pois não é a mesma referência) mas são iguais (ou seja, com os mesmos valores).
7. Mesclar
Crie uma função chamada mesclar
que recebe dois objetos como argumentos e mescla todas propriedades do segundo parâmetro dentro do primeiro. NÃO SURTEM!!! Exemplo:
var objeto1 = {
abacaxi: 0,
banana: { peso: 52, preco: 100 },
cereja: 97
};
var objeto2 = {
banana: { preco: 200 },
damasco: 100
};
mesclar(objeto1, objeto2);
console.log(objeto1);
// { abacaxi: 0, banana: { preco: 200 }, cereja: 97, damasco: 100 }
Bônus
Adicione um terceiro parâmetro na função mesclar
que, quando for true
, faça a operação de mescla ser recursiva, exemplo:
var objeto1 = {
abacaxi: 0,
banana: { peso: 52, preco: 100, origem: { cidade: 'taquari', estado: 'rs' } },
cereja: 97
};
var objeto2 = {
banana: { preco: 200, origem: { cidade: 'cachoeira do sul', estado: 'rs' } },
damasco: 100
};
mesclar(objeto1, objeto2, true);
console.log(objeto1);
/*
{
abacaxi: 0,
banana: {
peso: 52,
preco: 200,
origem: {
cidade: 'cachoeira do sul', estado: 'rs'
}
},
cereja: 97,
damasco: 100
}
*/
Esta flag, por padrão, deve ser sempre false
.