├── README.md ├── capitulo_5_es6_e_alem ├── index.html └── script.js ├── capitulo_7_regex ├── index.html └── scripts.js ├── capitulo_3_funcoes_em_javascript ├── index.html └── script.js ├── capitulo_4_objetos_e_arrays ├── index.html └── scripts.js ├── capitulo_2_fundamentos_de_javascript ├── index.html └── scripts.js └── capitulo_6_javascript_no_navegador ├── exercicio_187.html ├── exercicio_189.html ├── exercicio_188.html ├── exercicio_186.html ├── exercicio_191.html ├── exercicio_192.html ├── exercicio_197.html ├── exercicio_196.html ├── exercicio_200.html ├── exercicio_190.html ├── exercicio_193.html ├── exercicio_198.html ├── exercicio_199.html ├── exercicio_195.html └── exercicio_194.html /README.md: -------------------------------------------------------------------------------- 1 | ### e-book-javascript -------------------------------------------------------------------------------- /capitulo_5_es6_e_alem/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ES6 e Além 7 | 8 | 9 | 10 |

ES6 e Além

11 | 12 | -------------------------------------------------------------------------------- /capitulo_7_regex/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Regex 7 | 8 | 9 | 10 |

Regex

11 | 12 | 13 | -------------------------------------------------------------------------------- /capitulo_3_funcoes_em_javascript/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Funções em JavaScript 7 | 8 | 9 | 10 |

Funções em JavaScript

11 | 12 | -------------------------------------------------------------------------------- /capitulo_4_objetos_e_arrays/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Objetos e Arrays 7 | 8 | 9 | 10 |

Objetos e Arrays

11 | 12 | 13 | -------------------------------------------------------------------------------- /capitulo_2_fundamentos_de_javascript/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Fundamentos de JavaScript 7 | 8 | 9 | 10 |

Fundamentos de JavaScript

11 | 12 | 13 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_187.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 |

Este é um texto.

10 | 11 | 12 | 13 | 19 | 20 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_189.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 |
Clique no botão para alternar minha classe!
10 | 11 | 12 | 13 | 19 | 20 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_188.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | 10 |

11 | 12 | 13 | 21 | 22 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_186.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | 14 | 15 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_191.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 |
Sou visível agora?
10 | 11 | 12 | 24 | 25 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_192.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | 10 | 11 | 12 | 23 | 24 | 30 | 31 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_197.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 |

Olá, Mundo!

10 |

Este é um parágrafo de exemplo.

11 | 12 | 13 | 14 | 24 | 25 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_196.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | 10 |
Caracteres restantes: 150
11 | 12 | 13 | 29 | 30 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_200.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 |
10 | 11 | 12 |
13 |
Conteúdo da Aba 1
14 | 17 | 18 | 19 | 28 | 29 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_190.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | 15 | 16 | 17 | 18 | 19 | 35 | 36 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_193.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | 10 | 26 | 27 | 28 | 39 | 40 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_198.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | 17 | 18 | 19 | 31 | 32 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_199.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | 35 | 36 | 37 | 55 | 56 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_195.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | 10 |
23 |
28 | 29 |
30 | 31 | 32 | 50 | 51 | -------------------------------------------------------------------------------- /capitulo_6_javascript_no_navegador/exercicio_194.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JavaScript no Navegador 7 | 8 | 9 | Imagem 1 10 | Imagem 2 11 |
24 | Imagem Ampliada 37 | 43 |
44 | 45 | 46 | 59 | 60 | -------------------------------------------------------------------------------- /capitulo_7_regex/scripts.js: -------------------------------------------------------------------------------- 1 | // Exercício 200 2 | function isValidEmail(email) { 3 | const regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; 4 | return regex.test(email); 5 | } 6 | 7 | // Testes 8 | console.log(isValidEmail("example@email.com")); // true 9 | console.log(isValidEmail("invalid.email@")); // false 10 | 11 | // Exercício 201 12 | function extractUrls(text) { 13 | const regex = /(https?:\/\/[^\s]+)/g; 14 | return text.match(regex) || []; 15 | } 16 | 17 | // Testes 18 | console.log( 19 | extractUrls("Veja estes links https://www.example.com e http://test.com") 20 | ); // ["https://www.example.com", "http://test.com"] 21 | 22 | // Exercício 202 23 | function isValidDate(date) { 24 | // Verificar formato da data 25 | const regex = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/\d{4}$/; 26 | if (!regex.test(date)) { 27 | return false; 28 | } 29 | 30 | // Verificar datas não existentes 31 | const [day, month, year] = date.split("/").map(Number); 32 | const testDate = new Date(year, month - 1, day); 33 | return testDate.getDate() === day && testDate.getMonth() + 1 === month; 34 | } 35 | 36 | // Testes 37 | console.log(isValidDate("25/12/2020")); // true 38 | console.log(isValidDate("31/02/2020")); // false 39 | 40 | // Exercício 203 41 | function replaceHtmlTags(text) { 42 | const regex = /<(\w+)>(.*?)<\/\1>/g; 43 | return text.replace(regex, "[$1]$2[/$1]"); 44 | } 45 | 46 | // Testes 47 | console.log(replaceHtmlTags("
Hello
")); // [div]Hello[/div] 48 | 49 | // Exercício 204 50 | function extractPhoneNumbers(text) { 51 | const regex = /\(?\d{2}\)?[-.\s]?\d{4,5}[-.\s]?\d{4}/g; 52 | return text.match(regex) || []; 53 | } 54 | 55 | // Testes 56 | console.log(extractPhoneNumbers("Contact at (12) 34567-8901 or 12-3456-7890.")); // ["(12) 34567-8901", "12-3456-7890"] 57 | 58 | // Exercício 205 59 | function isValidPassword(password) { 60 | const regex = 61 | /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,20}$/; 62 | return regex.test(password); 63 | } 64 | 65 | // Testes 66 | console.log(isValidPassword("StrongPass1!")); // true 67 | console.log(isValidPassword("weakpass")); // false 68 | 69 | // Exercício 206 70 | function removeHtmlComments(text) { 71 | const regex = //g; 72 | return text.replace(regex, ""); 73 | } 74 | 75 | // Testes 76 | console.log(removeHtmlComments("Hello World")); // "Hello World" 77 | 78 | // Exercício 207 79 | function validateCEP(cep) { 80 | const cepRegex = /^\d{5}-?\d{3}$/; 81 | return cepRegex.test(cep); 82 | } 83 | 84 | // Testes: 85 | console.log(validateCEP("12345-678")); // true 86 | console.log(validateCEP("12345678")); // true 87 | console.log(validateCEP("1234")); // false 88 | 89 | // Exercício 208 90 | function extractTagsAndContent(html) { 91 | const regex = /<(\w+)>([^<]+)<\/\1>/g; 92 | let match; 93 | const result = {}; 94 | 95 | while ((match = regex.exec(html)) !== null) { 96 | result[match[1]] = match[2]; 97 | } 98 | return result; 99 | } 100 | 101 | // Testes 102 | console.log(extractTagsAndContent("
Hello

World

")); 103 | // { 104 | // div: "Hello", 105 | // p: "World" 106 | // } 107 | 108 | // Exercício 209 109 | function hasConsecutiveRepeats(text) { 110 | const regex = /\b(\w+)\b\s+\b\1\b/i; 111 | return regex.test(text); 112 | } 113 | 114 | // Testes 115 | console.log(hasConsecutiveRepeats("Hello hello world")); // true 116 | console.log(hasConsecutiveRepeats("Hello world")); // false 117 | 118 | // Exercício 210 119 | function extractDomain(url) { 120 | const regex = /^(?:https?:\/\/)?(?:www\.)?([^\/]+)/i; 121 | const match = url.match(regex); 122 | return match ? match[1] : ""; 123 | } 124 | 125 | // Testes 126 | console.log(extractDomain("https://www.example.com/page")); // "example.com" 127 | -------------------------------------------------------------------------------- /capitulo_3_funcoes_em_javascript/script.js: -------------------------------------------------------------------------------- 1 | 2 | // Execício 1 3 | 4 | function imprimirOlaMundo() { 5 | console.log("Olá, Mundo!"); 6 | } 7 | imprimirOlaMundo(); // "Olá, Mundo!" 8 | 9 | // Execício 2 10 | 11 | function somarNumeros(num1, num2) { 12 | return num1 + num2; 13 | } 14 | console.log(somarNumeros(3, 4)); // Saída: 7 15 | 16 | // Execício 3 17 | 18 | function quadrado(num) { 19 | return num * num; 20 | } 21 | console.log(quadrado(5)); // Saída: 25 22 | 23 | // Execício 4 24 | 25 | function parOuImpar(num) { 26 | if (num % 2 === 0) { 27 | return 'par'; 28 | } else { 29 | return 'ímpar'; 30 | } 31 | } 32 | console.log(parOuImpar(5)); // Saída: "ímpar" 33 | 34 | // Execício 5 35 | 36 | function maiorNumero(num1, num2, num3) { 37 | return Math.max(num1, num2, num3); 38 | } 39 | console.log(maiorNumero(3, 5, 4)); // Saída: 5 40 | 41 | // Execício 6 42 | 43 | function inverterString(str) { 44 | return str.split('').reverse().join(''); 45 | } 46 | console.log(inverterString('hello')); // Saída: "olleh" 47 | 48 | // Execício 7 49 | 50 | function calcularFatorial(num) { 51 | let fatorial = 1; 52 | for(let i = 2; i <= num; i++) { 53 | fatorial *= i; 54 | } 55 | return fatorial; 56 | } 57 | 58 | console.log(calcularFatorial(5)); // Saída: 120 59 | 60 | // Execício 8 61 | 62 | function calcularFibonacci(n) { 63 | let a = 0; 64 | let b = 1; 65 | 66 | for(let i = 2; i <= n; i++) { 67 | let temp = a; 68 | a = b; 69 | b = temp + b; 70 | } 71 | return b; 72 | } 73 | 74 | console.log(calcularFibonacci(7)); // Saída: 13 75 | 76 | // Execício 9 77 | 78 | function verificarPrimo(num) { 79 | for(let i = 2; i < num; i++) { 80 | if(num % i === 0) { 81 | return false; 82 | } 83 | } 84 | return num > 1; 85 | } 86 | 87 | console.log(verificarPrimo(7)); // Saída: true 88 | 89 | // Execício 10 90 | 91 | function ordenarDecrescente(array) { 92 | return array.sort((a, b) => b - a); 93 | } 94 | console.log(ordenarDecrescente([5, 2, 1, 3, 4])); // Saída: [5, 4, 3, 2, 1] 95 | 96 | // Execício 11 97 | 98 | function menorNumero(array) { 99 | return Math.min(...array); 100 | } 101 | 102 | console.log(menorNumero([5, 2, 1, 3, 4])); // Saída: 1 103 | 104 | // Execício 12 105 | 106 | function maiorNumero(array) { 107 | return Math.max(...array); 108 | } 109 | console.log(maiorNumero([5, 2, 1, 3, 4])); // Saída: 5 110 | 111 | // Execício 13 112 | 113 | function somaImpares(array) { 114 | return array.reduce((soma, num) => num % 2 !== 0 ? soma + num : soma, 0); 115 | } 116 | console.log(somaImpares([5, 2, 1, 3, 4])); // Saída: 9 117 | 118 | // Execício 14 119 | 120 | function somaPares(array) { 121 | return array.reduce((soma, num) => num % 2 === 0 ? soma + num : soma, 0); 122 | } 123 | 124 | console.log(somaPares([5, 2, 1, 3, 4])); // Saída: 6 125 | 126 | // Execício 15 127 | 128 | function duplicarNumeros(array) { 129 | return array.map(num => num * 2); 130 | } 131 | 132 | console.log(duplicarNumeros([5, 2, 1, 3, 4])); // Saída: [10, 4, 2, 6, 8] 133 | 134 | // Execício 16 135 | 136 | function quadradoNumeros(array) { 137 | return array.map(num => num * num); 138 | } 139 | 140 | console.log(quadradoNumeros([5, 2, 1, 3, 4])); // Saída: [25, 4, 1, 9, 16] 141 | 142 | // Execício 17 143 | 144 | function raizQuadradaNumeros(array) { 145 | return array.map(num => Math.sqrt(num)); 146 | } 147 | 148 | console.log(raizQuadradaNumeros([25, 4, 1, 9, 16])); // Saída: [5, 2, 1, 3, 4] 149 | 150 | // Execício 18 151 | 152 | function repetirString(num) { 153 | return 'Olá '.repeat(num); 154 | } 155 | console.log(repetirString(3)); // Saída: 'Olá Olá Olá' 156 | 157 | // Execício 19 158 | 159 | function primosAteN(num) { 160 | let primos = []; 161 | for(let i = 2; i <= num; i++) { 162 | if(isPrimo(i)) { 163 | primos.push(i); 164 | } 165 | } 166 | return primos; 167 | } 168 | 169 | function isPrimo(num) { 170 | for(let i = 2; i < num; i++) { 171 | if(num % i === 0) { 172 | return false; 173 | } 174 | } 175 | return num > 1; 176 | } 177 | 178 | console.log(primosAteN(10)); // Saída: [2, 3, 5, 7] 179 | 180 | // Execício 20 181 | 182 | function contarPalavras(str) { 183 | return str.split(' ').length; 184 | } 185 | console.log(contarPalavras("Olá, Mundo!")); // Saída: 2 186 | 187 | // Execício 21 188 | 189 | function somaComCallback(array, callback) { 190 | return array.map(callback).reduce((a, b) => a + b, 0); 191 | } 192 | 193 | let numeros = [1, 2, 3, 4, 5]; 194 | let callback = num => num * 2; 195 | 196 | console.log(somaComCallback(numeros, callback)); // Saída: 30 197 | 198 | // Execício 22 199 | 200 | function filtrarPorCallback(array, callback) { 201 | return array.filter(callback); 202 | } 203 | 204 | let numeros = [1, 2, 3, 4, 5]; 205 | let callback = num => num % 2 === 0; 206 | 207 | console.log(filtrarPorCallback(numeros, callback)); // Saída: [2, 4] 208 | 209 | // Execício 23 210 | 211 | function mapearArrays(array, callback) { 212 | return array.map(callback); 213 | } 214 | 215 | let arrays = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; 216 | let callback = arr => arr.reduce((a, b) => a + b, 0); 217 | 218 | console.log(mapearArrays(arrays, callback)); // Saída: [6, 15, 24] 219 | 220 | // Execício 24 221 | 222 | function filtrarNumeros(array, callback) { 223 | return array.filter(callback); 224 | } 225 | 226 | let numeros = [1, 2, 3, 4, 5]; 227 | let callback = num => num > 3; 228 | 229 | console.log(filtrarNumeros(numeros, callback)); // Saída: [4, 5] 230 | 231 | // Execício 25 232 | 233 | function executarCallback(n, callback) { 234 | for (let i = 0; i < n; i++) { 235 | callback(i); 236 | } 237 | } 238 | 239 | let callback = i => console.log(`Execução ${i+1}`); 240 | 241 | executarCallback(5, callback); // Saída: "Execução 1", "Execução 2", "Execução 3", "Execução 4", "Execução 5" 242 | 243 | 244 | // Execício 26 245 | 246 | function aplicarCallbacks(callback, valor) { 247 | return callback.map(callback => callback(valor)); 248 | } 249 | 250 | let callback = [num => num * 2, num => num * num, num => num / 2]; 251 | let valor = 4; 252 | 253 | console.log(aplicarCallbacks(callback, valor)); // Saída: [8, 16, 2] 254 | 255 | // Execício 27 256 | 257 | function executarDepois(callback, tempo) { 258 | setTimeout(callback, tempo); 259 | } 260 | 261 | let callback = () => console.log("Executado!"); 262 | 263 | executarDepois(callback, 2000); // Saída: "Executado!" após 2 segundos 264 | 265 | // Execício 28 266 | 267 | function aplicarCallbacksNTimes(n, callback, valorInicial) { 268 | let valor = valorInicial; 269 | for(let i = 0; i < n; i++){ 270 | callback.forEach(callback => { 271 | valor = callback(valor); 272 | }); 273 | } 274 | return valor; 275 | } 276 | 277 | let callback = [num => num * 2, num => num + 1]; 278 | let valorInicial = 1; 279 | 280 | console.log(aplicarCallbacksNTimes(2, callback, valorInicial)); // Saída: 7 281 | 282 | // Execício 29 283 | 284 | function aplicarCallbacksComIntervalo(n, callback, valorInicial) { 285 | let valor = valorInicial; 286 | let i = 0; 287 | let intervalId = setInterval(() => { 288 | if(i < callback.length) { 289 | valor = callback[i](valor); 290 | i++; 291 | } else { 292 | clearInterval(intervalId); 293 | console.log(valor); 294 | } 295 | }, n); 296 | } 297 | 298 | let callback = [num => num * 2, num => num + 1]; 299 | let valorInicial = 1; 300 | 301 | aplicarCallbacksComIntervalo(2000, callback, valorInicial); // Saída: valor após 2 segundos por callback 302 | 303 | // Execício 30 304 | 305 | function mapearSemAlterar(array, callback) { 306 | return array.map(callback); 307 | } 308 | 309 | let numeros = [1, 2, 3, 4, 5]; 310 | let callback = num => num * 2; 311 | 312 | console.log(mapearSemAlterar(numeros, callback)); // Saída: [2, 4, 6, 8, 10] 313 | console.log(numeros); // Saída: [1, 2, 3, 4, 5] 314 | 315 | // Execício 31 316 | 317 | function aplicarCallbacksInversamente(callback, valor) { 318 | return callback.reverse().map(callback => callback(valor)); 319 | } 320 | 321 | let callback = [num => num * 2, num => num * num, num => num / 2]; 322 | let valor = 4; 323 | 324 | console.log(aplicarCallbacksInversamente(callback, valor)); // Saída: [2, 16, 8] -------------------------------------------------------------------------------- /capitulo_4_objetos_e_arrays/scripts.js: -------------------------------------------------------------------------------- 1 | // Objetos: Propriedades, Métodos e Herança 2 | 3 | // Exercício 76 4 | let obj = {}; // Criação de um objeto vazio 5 | 6 | obj.numero = 10; // Adicionando uma propriedade numérica 7 | obj.texto = "Olá, mundo!"; // Adicionando uma propriedade string 8 | obj.booleano = true; // Adicionando uma propriedade booleana 9 | 10 | console.log(obj); // Deve imprimir { numero: 10, texto: 'Olá, mundo!', booleano: true } 11 | 12 | // Exercício 77 13 | let livro = { 14 | titulo: "O Hobbit", 15 | autor: "J.R.R. Tolkien", 16 | numeroDePaginas: 310, 17 | 18 | descricao: function () { 19 | console.log( 20 | `O livro ${this.titulo}, escrito por ${this.autor}, tem ${this.numeroDePaginas} páginas.` 21 | ); 22 | }, 23 | }; 24 | 25 | livro.descricao(); // Deve imprimir: 'O livro O Hobbit, escrito por J.R.R. Tolkien, tem 310 páginas.' 26 | 27 | // Exercício 78 28 | let cachorro = { 29 | raca: "Labrador", 30 | nome: "Rex", 31 | idade: 3, 32 | 33 | idadeEmAnosHumanos: function () { 34 | return this.idade * 7; 35 | }, 36 | }; 37 | 38 | console.log(cachorro.idadeEmAnosHumanos()); // Deve imprimir: 21 39 | 40 | // Exercício 79 41 | let carro = { 42 | marca: "Ford", 43 | modelo: "Mustang", 44 | ano: 1969, 45 | velocidadeAtual: 0, 46 | 47 | acelerar: function () { 48 | this.velocidadeAtual += 10; 49 | }, 50 | 51 | frear: function () { 52 | this.velocidadeAtual -= 10; 53 | if (this.velocidadeAtual < 0) { 54 | this.velocidadeAtual = 0; 55 | } 56 | }, 57 | 58 | obterVelocidadeAtual: function () { 59 | return this.velocidadeAtual; 60 | }, 61 | }; 62 | 63 | carro.acelerar(); 64 | console.log(carro.obterVelocidadeAtual()); // Deve imprimir: 10 65 | 66 | carro.frear(); 67 | console.log(carro.obterVelocidadeAtual()); // Deve imprimir: 0 68 | 69 | // Exercício 80 70 | let estudante = { 71 | nome: "João", 72 | notas: [10, 8, 9, 7], 73 | 74 | calcularMedia: function () { 75 | let soma = 0; 76 | for (let i = 0; i < this.notas.length; i++) { 77 | soma += this.notas[i]; 78 | } 79 | return soma / this.notas.length; 80 | }, 81 | }; 82 | 83 | console.log(estudante.calcularMedia()); // Deve imprimir: 8.5 84 | 85 | // Exercício 81 86 | let contaBancaria = { 87 | saldo: 1000, 88 | 89 | depositar: function (valor) { 90 | this.saldo += valor; 91 | }, 92 | 93 | sacar: function (valor) { 94 | if (valor <= this.saldo) { 95 | this.saldo -= valor; 96 | } else { 97 | console.log("Saldo insuficiente."); 98 | } 99 | }, 100 | 101 | obterSaldo: function () { 102 | return this.saldo; 103 | }, 104 | }; 105 | 106 | contaBancaria.depositar(500); 107 | console.log(contaBancaria.obterSaldo()); // Deve imprimir: 1500 108 | 109 | contaBancaria.sacar(200); 110 | console.log(contaBancaria.obterSaldo()); // Deve imprimir: 1300 111 | 112 | // Exercício 82 113 | let circulo = { 114 | raio: 5, 115 | 116 | calcularArea: function () { 117 | return Math.PI * Math.pow(this.raio, 2); 118 | }, 119 | 120 | calcularCircunferencia: function () { 121 | return 2 * Math.PI * this.raio; 122 | }, 123 | }; 124 | 125 | console.log(circulo.calcularArea()); // Deve imprimir: 78.53981633974483 126 | console.log(circulo.calcularCircunferencia()); // Deve imprimir: 31.41592653589793 127 | 128 | // Exercício 83 129 | let tempo = { 130 | horas: 2, 131 | minutos: 30, 132 | segundos: 15, 133 | 134 | converterParaSegundos: function () { 135 | return this.horas * 3600 + this.minutos * 60 + this.segundos; 136 | }, 137 | }; 138 | 139 | console.log(tempo.converterParaSegundos()); // Deve imprimir: 9015 140 | 141 | // Exercício 84 142 | let retangulo = { 143 | altura: 5, 144 | largura: 10, 145 | 146 | calcularArea: function () { 147 | return this.altura * this.largura; 148 | }, 149 | }; 150 | 151 | console.log(retangulo.calcularArea()); // Deve imprimir: 50 152 | 153 | // Exercício 85 154 | let quadrado = Object.create(retangulo); 155 | quadrado.largura = 5; 156 | quadrado.altura = 5; 157 | 158 | quadrado.calcularArea = function () { 159 | return this.largura * this.largura; 160 | }; 161 | 162 | console.log(quadrado.calcularArea()); // Deve imprimir: 25 163 | 164 | // Exercício 86 165 | let livro = { 166 | titulo: "1984", 167 | autor: "George Orwell", 168 | paginas: 328, 169 | 170 | exibirLivro: function () { 171 | console.log( 172 | this.titulo + 173 | ", escrito por " + 174 | this.autor + 175 | ", com " + 176 | this.paginas + 177 | " páginas" 178 | ); 179 | }, 180 | }; 181 | 182 | livro.exibirLivro(); // Deve imprimir: 1984, escrito por George Orwell, com 328 páginas 183 | 184 | // Arrays: Métodos e Operações 185 | 186 | // Exercício 87 187 | function combineAndFilter(pares, impares) { 188 | return pares.concat(impares).filter((num) => num % 5 === 0); 189 | } 190 | 191 | const pares = [2, 4, 10, 12, 20]; 192 | const impares = [1, 3, 5, 15, 25]; 193 | console.log(combineAndFilter(pares, impares)); // [10, 20, 5, 15, 25] 194 | 195 | // Exercício 88 196 | function calculateTotalWithTax(prices) { 197 | return prices 198 | .map((price) => price * 1.1) 199 | .reduce((acc, curr) => acc + curr, 0); 200 | } 201 | 202 | const prices = [10, 20, 30, 40]; 203 | console.log(calculateTotalWithTax(prices)); // 110 204 | 205 | // Exercício 89 206 | function longestWord(string) { 207 | return string 208 | .split(" ") 209 | .reduce((acc, curr) => (curr.length > acc.length ? curr : acc), ""); 210 | } 211 | 212 | const sentence = "Essa frase tem muitas palavras, qual é a maior?"; 213 | console.log(longestWord(sentence)); // "palavras" 214 | 215 | // Exercício 90 216 | function removeDuplicates(arr) { 217 | return [...new Set(arr)]; 218 | } 219 | 220 | const numbers = [1, 2, 3, 2, 4, 3, 5, 6, 7, 5, 8]; 221 | console.log(removeDuplicates(numbers)); // [1, 2, 3, 4, 5, 6, 7, 8] 222 | 223 | // Exercício 91 224 | function sortByStringLength(arr) { 225 | return arr.sort((a, b) => b.length - a.length); 226 | } 227 | 228 | const words = ["apple", "banana", "cherry", "date", "elderberry"]; 229 | console.log(sortByStringLength(words)); // ["elderberry", "banana", "cherry", "apple", "date"] 230 | 231 | // Exercício 92 232 | function extractPropertyValues(arr, key) { 233 | return arr.map((obj) => obj[key]); 234 | } 235 | 236 | const users = [ 237 | { name: "John", age: 25 }, 238 | { name: "Jane", age: 30 }, 239 | { name: "Doe", age: 20 }, 240 | ]; 241 | console.log(extractPropertyValues(users, "name")); // ["John", "Jane", "Doe"] 242 | 243 | // Exercício 93 244 | function findMedian(arr) { 245 | arr.sort((a, b) => a - b); 246 | const middle = Math.floor(arr.length / 2); 247 | if (arr.length % 2 === 0) { 248 | return (arr[middle - 1] + arr[middle]) / 2; 249 | } 250 | return arr[middle]; 251 | } 252 | 253 | const numbers = [5, 2, 9, 1, 5, 6]; 254 | console.log(findMedian(numbers)); // 5 255 | 256 | // Execício 94 257 | function filterByStringLength(arr, n) { 258 | return arr.filter((word) => word.length > n); 259 | } 260 | 261 | const words = ["apple", "banana", "cherry", "date", "elderberry"]; 262 | console.log(filterByStringLength(words, 5)); // ["banana", "elderberry"] 263 | 264 | // Exercício 95 265 | function concatenateArrays(arr1, arr2) { 266 | return arr1.concat(arr2); 267 | } 268 | 269 | const firstArray = [1, 2, 3]; 270 | const secondArray = [4, 5, 6]; 271 | 272 | console.log(concatenateArrays(firstArray, secondArray)); // [1, 2, 3, 4, 5, 6] 273 | 274 | // Exercício 96 275 | function isSubarray(mainArray, subArray) { 276 | return mainArray.join(",").includes(subArray.join(",")); 277 | } 278 | 279 | const mainArr = [1, 2, 3, 4, 5]; 280 | const subArr1 = [2, 3, 4]; 281 | const subArr2 = [2, 4, 5]; 282 | console.log(isSubarray(mainArr, subArr1)); // true 283 | console.log(isSubarray(mainArr, subArr2)); // false 284 | 285 | // Exercício 97 286 | function mostFrequentItem(arr) { 287 | const frequency = {}; 288 | let maxCount = 0; 289 | let mostFrequent; 290 | 291 | for (let item of arr) { 292 | if (frequency[item]) { 293 | frequency[item]++; 294 | } else { 295 | frequency[item] = 1; 296 | } 297 | 298 | if (frequency[item] > maxCount) { 299 | maxCount = frequency[item]; 300 | mostFrequent = item; 301 | } 302 | } 303 | 304 | return mostFrequent; 305 | } 306 | 307 | const numbers = [1, 2, 3, 2, 4, 3, 5, 2]; 308 | console.log(mostFrequentItem(numbers)); // 2 309 | 310 | // Exercício 98 311 | function filterOutWords(words, forbiddenWords) { 312 | return words.filter((word) => !forbiddenWords.includes(word)); 313 | } 314 | 315 | const allWords = ["apple", "banana", "cherry", "date"]; 316 | const forbidden = ["banana", "date"]; 317 | console.log(filterOutWords(allWords, forbidden)); // ["apple", "cherry"] 318 | 319 | // Exercício 99 320 | function combineInPairs(arr) { 321 | const result = []; 322 | for (let i = 0; i < arr.length; i++) { 323 | for (let j = i + 1; j < arr.length; j++) { 324 | result.push([arr[i], arr[j]]); 325 | } 326 | } 327 | return result; 328 | } 329 | 330 | const numbers = [1, 2, 3, 4]; 331 | console.log(combineInPairs(numbers)); // [[1,2], [1,3], [1,4], [2,3], [2,4], [3,4]] 332 | 333 | // Exercício 100 334 | function chunkArray(arr, n) { 335 | const chunks = []; 336 | for (let i = 0; i < arr.length; i += n) { 337 | chunks.push(arr.slice(i, i + n)); 338 | } 339 | return chunks; 340 | } 341 | 342 | const items = [1, 2, 3, 4, 5, 6, 7]; 343 | console.log(chunkArray(items, 3)); // [[1,2,3], [4,5,6], [7]] 344 | 345 | // Exercício 101 346 | function sumUniqueValues(arr) { 347 | return arr 348 | .filter((num) => arr.indexOf(num) === arr.lastIndexOf(num)) 349 | .reduce((acc, curr) => acc + curr, 0); 350 | } 351 | 352 | const numbers2 = [1, 2, 3, 2, 3, 4, 5]; 353 | console.log(sumUniqueValues(numbers2)); // 1 + 4 + 5 = 10 354 | 355 | // Exercício 102 356 | function joinStrings(arr) { 357 | return arr.join(","); 358 | } 359 | 360 | const fruits = ["apple", "banana", "cherry"]; 361 | console.log(joinStrings(fruits)); // "apple,banana,cherry" 362 | 363 | // JSON 364 | 365 | // Exercício 103 366 | function objetoParaJson(obj) { 367 | return JSON.stringify(obj); 368 | } 369 | 370 | const objetoTeste = { nome: "João", idade: 25 }; 371 | console.log(objetoParaJson(objetoTeste)); // "{'nome':'João','idade':25}" 372 | 373 | // Exercício 104 374 | function jsonParaObjeto(jsonStr) { 375 | return JSON.parse(jsonStr); 376 | } 377 | 378 | const jsonStringTeste = '{"nome":"João","idade":25}'; 379 | console.log(jsonParaObjeto(jsonStringTeste)); 380 | // { 381 | // "nome": "João", 382 | // "idade": 25 383 | // } 384 | 385 | // Exercício 105 386 | function acessarPropriedade(jsonStr, prop) { 387 | const obj = JSON.parse(jsonStr); 388 | return obj[prop]; 389 | } 390 | 391 | const jsonStringTeste = '{"nome":"João","idade":25}'; 392 | console.log(acessarPropriedade(jsonStringTeste, "nome")); // "João" 393 | 394 | // Execício 106 395 | function adicionarPropriedade(jsonStr, chave, valor) { 396 | const obj = JSON.parse(jsonStr); 397 | obj[chave] = valor; 398 | return obj; 399 | } 400 | 401 | const jsonStringTeste = '{"nome":"João","idade":25}'; 402 | console.log(adicionarPropriedade(jsonStringTeste, "profissao", "Engenheiro")); 403 | // { 404 | // "nome": "João", 405 | // "idade": 25, 406 | // "profissao": "Engenheiro" 407 | // } 408 | 409 | // Execício 107 410 | function filtrarEConverter(obj) { 411 | return JSON.stringify(obj, ["nome", "idade"]); 412 | } 413 | 414 | const objetoTeste = { nome: "João", senha: "12345", idade: 25 }; 415 | console.log(filtrarEConverter(objetoTeste)); // "{'nome':'João','idade':25}" 416 | 417 | // Exercício 108 418 | function formatarJson(obj) { 419 | return JSON.stringify(obj, null, 2); 420 | } 421 | 422 | const objetoTeste = { nome: "João", idade: 25 }; 423 | console.log(formatarJson(objetoTeste)); 424 | // "{ 425 | // 'nome': 'João', 426 | // 'idade': 25 427 | // }" 428 | 429 | // Execício 109 430 | function adicionarAoArray(jsonStr, novoObjeto) { 431 | const arr = JSON.parse(jsonStr); 432 | arr.push(novoObjeto); 433 | return arr; 434 | } 435 | 436 | const jsonStringTeste = 437 | '[{"nome":"João","idade":25},{"nome":"Maria","idade":30}]'; 438 | console.log(adicionarAoArray(jsonStringTeste, { nome: "Pedro", idade: 22 })); 439 | // [ 440 | // { 441 | // nome: "João", 442 | // idade: 25, 443 | // }, 444 | // { 445 | // nome: "Maria", 446 | // idade: 30, 447 | // }, 448 | // { 449 | // nome: "Pedro", 450 | // idade: 22, 451 | // }, 452 | // ]; 453 | 454 | // Exercício 110 455 | function alterarEConverter(obj) { 456 | const alterarValor = (key, value) => { 457 | if (key === "idade") return value + 1; 458 | return value; 459 | }; 460 | return JSON.stringify(obj, alterarValor); 461 | } 462 | 463 | const objetoTeste = { nome: "João", idade: 25 }; 464 | console.log(alterarEConverter(objetoTeste)); // "{'nome':'João','idade':26}" 465 | -------------------------------------------------------------------------------- /capitulo_2_fundamentos_de_javascript/scripts.js: -------------------------------------------------------------------------------- 1 | // Variáveis, tipos de dados e operadores 2 | 3 | // Exercício 1 4 | let idade = 25; 5 | let peso = 70; 6 | 7 | console.log("Idade: ", idade); 8 | console.log("Peso: ", peso); 9 | 10 | // Exercício 2 11 | const PI = 3.14159; 12 | console.log("PI: ", PI); 13 | 14 | // Exercício 3 15 | let númeroMáximo = Number.MAX_VALUE; 16 | console.log("Número Máximo: ", númeroMáximo); 17 | 18 | // Exercício 4 19 | let nome = "João"; 20 | let sobrenome = "Silva"; 21 | let nomeCompleto = nome + " " + sobrenome; 22 | 23 | console.log("Nome Completo: ", nomeCompleto); 24 | 25 | // Exercício 5 26 | let num1 = 10; 27 | let num2 = 20; 28 | 29 | let soma = num1 + num2; 30 | 31 | console.log("Soma: ", soma); 32 | 33 | // Exercício 6 34 | let bool1 = true; 35 | let bool2 = false; 36 | 37 | console.log("AND: ", bool1 && bool2); 38 | console.log("OR: ", bool1 || bool2); 39 | console.log("NOT: ", !bool1); 40 | 41 | // Exercício 7 42 | let num1 = 10; 43 | let num2 = 20; 44 | let num3 = 30; 45 | 46 | console.log("num1 < num2: ", num1 < num2); 47 | console.log("num2 > num3: ", num2 > num3); 48 | console.log("num1 == num3: ", num1 == num3); 49 | 50 | // Exercício 8 51 | let num = 10; 52 | num++; 53 | 54 | console.log("Número incrementado: ", num); 55 | 56 | // Operadores Condicionais 57 | 58 | // Exercício 9 59 | function verificarNumero(num) { 60 | if (num > 0) { 61 | console.log("O número é positivo"); 62 | } else if (num < 0) { 63 | console.log("O número é negativo"); 64 | } else { 65 | console.log("O número é zero"); 66 | } 67 | } 68 | 69 | verificarNumero(10); // Imprime: O número é positivo 70 | verificarNumero(-5); // Imprime: O número é negativo 71 | verificarNumero(0); // Imprime: O número é zero 72 | 73 | // Exercício 10 74 | function calcularMedia(nota1, nota2) { 75 | var media = (nota1 + nota2) / 2; 76 | if (media >= 7) { 77 | console.log("Aluno aprovado com a média: " + media); 78 | } else { 79 | console.log("Aluno reprovado com a média: " + media); 80 | } 81 | } 82 | 83 | calcularMedia(8, 6); // Imprime: Aluno aprovado com a média: 7 84 | calcularMedia(5, 6); // Imprime: Aluno reprovado com a média: 5.5 85 | 86 | // Exercício 11 87 | function podeVotar(idade) { 88 | if (idade >= 18 && idade < 70) { 89 | console.log("Voto obrigatório."); 90 | } else if ((idade >= 16 && idade < 18) || idade >= 70) { 91 | console.log("Voto facultativo."); 92 | } else { 93 | console.log("Não vota."); 94 | } 95 | } 96 | 97 | podeVotar(15); // Imprime: Não vota. 98 | podeVotar(16); // Imprime: Voto facultativo. 99 | podeVotar(18); // Imprime: Voto obrigatório. 100 | podeVotar(70); // Imprime: Voto facultativo. 101 | 102 | // Exercício 12 103 | function situacaoEstudante(mediaFinal) { 104 | if (mediaFinal >= 7) { 105 | console.log("Aprovado."); 106 | } else if (mediaFinal >= 5 && mediaFinal < 7) { 107 | console.log("Em recuperação."); 108 | } else { 109 | console.log("Reprovado."); 110 | } 111 | } 112 | 113 | situacaoEstudante(7); // Imprime: Aprovado. 114 | situacaoEstudante(6); // Imprime: Em recuperação. 115 | situacaoEstudante(4); // Imprime: Reprovado. 116 | 117 | // Exercício 13 118 | function calcularIMC(peso, altura) { 119 | var imc = peso / (altura * altura); 120 | if (imc < 18.5) { 121 | console.log("Abaixo do peso"); 122 | } else if (imc >= 18.5 && imc < 25) { 123 | console.log("Peso normal"); 124 | } else if (imc >= 25 && imc < 30) { 125 | console.log("Sobrepeso"); 126 | } else { 127 | console.log("Obesidade"); 128 | } 129 | } 130 | 131 | calcularIMC(60, 1.7); // Imprime: Peso normal 132 | calcularIMC(80, 1.7); // Imprime: Sobrepeso 133 | calcularIMC(90, 1.7); // Imprime: Obesidade 134 | 135 | // Exercício 14 136 | function verificarBissexto(ano) { 137 | if ((ano % 4 == 0 && ano % 100 != 0) || ano % 400 == 0) { 138 | console.log(ano + " é um ano bissexto"); 139 | } else { 140 | console.log(ano + " não é um ano bissexto"); 141 | } 142 | } 143 | 144 | verificarBissexto(2000); // Imprime: 2000 é um ano bissexto 145 | verificarBissexto(2001); // Imprime: 2001 não é um ano bissexto 146 | verificarBissexto(2100); // Imprime: 2100 não é um ano bissexto 147 | 148 | // Exercício 15 149 | function verificarPalindromo(palavra) { 150 | var palavraInvertida = palavra.split("").reverse().join(""); 151 | if (palavra == palavraInvertida) { 152 | console.log(palavra + " é um palíndromo"); 153 | } else { 154 | console.log(palavra + " não é um palíndromo"); 155 | } 156 | } 157 | 158 | verificarPalindromo("arara"); // Imprime: arara é um palíndromo 159 | verificarPalindromo("gato"); // Imprime: gato não é um palíndromo 160 | 161 | // Exercício 16 162 | function maiorNumero(n1, n2, n3) { 163 | if (n1 > n2 && n1 > n3) { 164 | console.log(n1 + " é o maior número"); 165 | } else if (n2 > n1 && n2 > n3) { 166 | console.log(n2 + " é o maior número"); 167 | } else { 168 | console.log(n3 + " é o maior número"); 169 | } 170 | } 171 | 172 | maiorNumero(1, 2, 3); // Imprime: 3 é o maior número 173 | maiorNumero(5, 3, 4); // Imprime: 5 é o maior número 174 | maiorNumero(7, 8, 7); // Imprime: 8 é o maior número 175 | 176 | // Exercício 17 177 | function parOuImpar(numero) { 178 | if (numero % 2 == 0) { 179 | console.log(numero + " é par"); 180 | } else { 181 | console.log(numero + " é ímpar"); 182 | } 183 | } 184 | 185 | parOuImpar(2); // Imprime: 2 é par 186 | parOuImpar(3); // Imprime: 3 é ímpar 187 | 188 | // Exercício 18 189 | function podeDirigir(idade) { 190 | if (idade >= 18) { 191 | console.log("Pode dirigir."); 192 | } else { 193 | console.log("Não pode dirigir"); 194 | } 195 | } 196 | 197 | podeDirigir(15); // Imprime: Não pode dirigir 198 | podeDirigir(18); // Imprime: Pode dirigir 199 | podeDirigir(36); // Imprime: Pode dirigir 200 | 201 | // Exercício 19 202 | function dentroDoIntervalo(numero, limiteInferior, limiteSuperior) { 203 | if (numero >= limiteInferior && numero <= limiteSuperior) { 204 | console.log(numero + " está dentro do intervalo"); 205 | } else { 206 | console.log(numero + " está fora do intervalo"); 207 | } 208 | } 209 | 210 | dentroDoIntervalo(5, 1, 10); // Imprime: 5 está dentro do intervalo 211 | dentroDoIntervalo(15, 1, 10); // Imprime: 15 está fora do intervalo 212 | 213 | // Exercício 20 214 | function classificarAluno(nota) { 215 | if (nota >= 90) { 216 | console.log("A"); 217 | } else if (nota >= 80) { 218 | console.log("B"); 219 | } else if (nota >= 70) { 220 | console.log("C"); 221 | } else if (nota >= 60) { 222 | console.log("D"); 223 | } else { 224 | console.log("F"); 225 | } 226 | } 227 | 228 | classificarAluno(95); // Imprime: A 229 | classificarAluno(82); // Imprime: B 230 | classificarAluno(74); // Imprime: C 231 | classificarAluno(62); // Imprime: D 232 | classificarAluno(55); // Imprime: F 233 | 234 | // Exercício 21 235 | function determinarEstacao(mes) { 236 | if (mes < 3 || mes === 12) { 237 | console.log("Verão"); 238 | } else if (mes < 6) { 239 | console.log("Outono"); 240 | } else if (mes < 9) { 241 | console.log("Inverno"); 242 | } else { 243 | console.log("Primavera"); 244 | } 245 | } 246 | 247 | determinarEstacao(12); // Imprime: Verão 248 | determinarEstacao(4); // Imprime: Outono 249 | determinarEstacao(7); // Imprime: Inverno 250 | determinarEstacao(10); // Imprime: Primavera 251 | 252 | // Exercício 22 253 | function determinarDiasNoMes(mes) { 254 | switch (mes) { 255 | case 2: 256 | console.log("28 ou 29 dias"); 257 | break; 258 | case 4: 259 | case 6: 260 | case 9: 261 | case 11: 262 | console.log("30 dias"); 263 | break; 264 | default: 265 | console.log("31 dias"); 266 | } 267 | } 268 | 269 | determinarDiasNoMes(2); // Imprime: 28 ou 29 dias 270 | determinarDiasNoMes(4); // Imprime: 30 dias 271 | determinarDiasNoMes(1); // Imprime: 31 dias 272 | 273 | // Exercício 23 274 | function verificaSemafaro(cor) { 275 | if (cor === "verde") { 276 | console.log("Siga em frente."); 277 | } else if (cor === "amarelo") { 278 | console.log("Atenção, diminua a velocidade."); 279 | } else if (cor === "vermelho") { 280 | console.log("Pare seu veículo."); 281 | } else { 282 | console.log("Envie uma cor válida."); 283 | } 284 | } 285 | 286 | verificaSemafaro("verde"); // Imprime: Siga em frente 287 | verificaSemafaro("amarelo"); // Imprime: Atenção, diminua a velocidade 288 | verificaSemafaro("vermelho"); // Imprime: Pare seu veículo 289 | verificaSemafaro("azul"); // Impime: Envie uma cor válida 290 | 291 | // Laços de Repetição 292 | 293 | // Exercíco 24 294 | for (let i = 1; i <= 10; i++) { 295 | console.log(i); 296 | } 297 | 298 | // Exercício 25 299 | let i = 10; 300 | while (i >= 1) { 301 | console.log(i); 302 | i--; 303 | } 304 | 305 | // Exercício 26 306 | let i = 1; 307 | do { 308 | if (i % 2 != 0) { 309 | console.log(i); 310 | } 311 | i++; 312 | } while (i <= 20); 313 | 314 | // Exercício 27 315 | for (let i = 1; i <= 10; i++) { 316 | console.log("5 x " + i + " = " + 5 * i); 317 | } 318 | 319 | // Exercício 28 320 | let i = 1; 321 | let soma = 0; 322 | while (i <= 100) { 323 | soma += i; 324 | i++; 325 | } 326 | console.log(soma); 327 | 328 | // Exercício 29 329 | let i = 1; 330 | do { 331 | if (i % 2 == 0) { 332 | console.log(i); 333 | } 334 | i++; 335 | } while (i <= 100); 336 | 337 | // Exercício 30 338 | for (let num = 2; num <= 100; num++) { 339 | let isPrime = true; 340 | for (let div = 2; div < num; div++) { 341 | if (num % div == 0) { 342 | isPrime = false; 343 | break; 344 | } 345 | } 346 | if (isPrime) { 347 | console.log(num); 348 | } 349 | } 350 | 351 | // Exercício 31 352 | let min = 1; 353 | let max = 100; 354 | let chute = Math.floor((max + min) / 2); 355 | let numeroPensado = 50; 356 | 357 | while (chute !== numeroPensado) { 358 | if (chute > numeroPensado) { 359 | max = chute; 360 | } else { 361 | min = chute; 362 | } 363 | chute = Math.floor((max + min) / 2); 364 | } 365 | console.log("O número pensado é: " + chute); 366 | 367 | // Exercício 32 368 | let escolhaUsuario = "pedra"; 369 | let escolhaComputador; 370 | let resultado; 371 | do { 372 | let aleatorio = Math.floor(Math.random() * 3); 373 | switch (aleatorio) { 374 | case 0: 375 | escolhaComputador = "pedra"; 376 | break; 377 | case 1: 378 | escolhaComputador = "papel"; 379 | break; 380 | default: 381 | escolhaComputador = "tesoura"; 382 | } 383 | 384 | if ( 385 | (escolhaUsuario === "pedra" && escolhaComputador === "tesoura") || 386 | (escolhaUsuario === "papel" && escolhaComputador === "pedra") || 387 | (escolhaUsuario === "tesoura" && escolhaComputador === "papel") 388 | ) { 389 | resultado = "Usuário ganhou!"; 390 | } else if (escolhaUsuario === escolhaComputador) { 391 | resultado = "Empate!"; 392 | } else { 393 | resultado = "Computador ganhou!"; 394 | } 395 | console.log( 396 | "Usuário: " + 397 | escolhaUsuario + 398 | " - Computador: " + 399 | escolhaComputador + 400 | " - Resultado: " + 401 | resultado 402 | ); 403 | } while (resultado === "Empate!"); 404 | 405 | // Exercício 33 406 | let num1 = 0; 407 | let num2 = 1; 408 | console.log(num1); 409 | console.log(num2); 410 | for (let i = 2; i < 10; i++) { 411 | let nextNum = num1 + num2; 412 | console.log(nextNum); 413 | num1 = num2; 414 | num2 = nextNum; 415 | } 416 | 417 | // Exercício 34 418 | let num = 1; 419 | while (num <= 100) { 420 | if (num % 3 === 0 && num % 5 === 0) { 421 | console.log("FizzBuzz"); 422 | } else if (num % 3 === 0) { 423 | console.log("Fizz"); 424 | } else if (num % 5 === 0) { 425 | console.log("Buzz"); 426 | } else { 427 | console.log(num); 428 | } 429 | num++; 430 | } 431 | 432 | // Exercício 35 433 | for (let n = 1; n <= 10; n++) { 434 | let triangular = (n * (n + 1)) / 2; 435 | console.log(triangular); 436 | } 437 | 438 | // Exercício 36 439 | for (let i = 1; i <= 100; i++) { 440 | let soma = 0; 441 | for (let j = 1; j < i; j++) { 442 | if (i % j === 0) { 443 | soma += j; 444 | } 445 | } 446 | if (soma === i) { 447 | console.log(i); 448 | } 449 | } 450 | 451 | // Exercício 37 452 | let somaQuadrados = 0; 453 | let i = 1; 454 | while (i <= 10) { 455 | somaQuadrados += i * i; 456 | i++; 457 | } 458 | console.log(somaQuadrados); 459 | 460 | // Exercício 38 461 | let somaCubos = 0; 462 | let i = 1; 463 | do { 464 | somaCubos += i * i * i; 465 | i++; 466 | } while (i <= 10); 467 | console.log(somaCubos); 468 | 469 | // Exercício 39 470 | let numero = 5; // Altere este valor para o número desejado. 471 | let fatorial = 1; 472 | for (let i = 1; i <= numero; i++) { 473 | fatorial *= i; 474 | } 475 | console.log(`O fatorial de ${numero} é ${fatorial}`); 476 | 477 | // Exercício 40 478 | let original = "Hello"; // Altere este valor para a string desejada. 479 | let invertida = ""; 480 | let i = original.length - 1; 481 | while (i >= 0) { 482 | invertida += original[i]; 483 | i--; 484 | } 485 | console.log(`A string "${original}" invertida é "${invertida}"`); 486 | 487 | // Exercício 41 488 | let numero = 10; // Altere este valor para o número desejado. 489 | let binario = ""; 490 | do { 491 | binario = (numero % 2) + binario; 492 | numero = Math.floor(numero / 2); 493 | } while (numero > 0); 494 | console.log(`O número em binário é ${binario}`); 495 | 496 | // Exercício 42 497 | let binario = "1010"; // Altere este valor para o número binário desejado. 498 | let decimal = 0; 499 | for (let i = binario.length - 1, j = 0; i >= 0; i--, j++) { 500 | decimal += parseInt(binario[i]) * Math.pow(2, j); 501 | } 502 | console.log(`O número em decimal é ${decimal}`); 503 | 504 | // Exercício 43 505 | let numero = 12321; // Altere este valor para o número desejado. 506 | let reverso = 0; 507 | let temp = numero; 508 | while (temp > 0) { 509 | let digito = temp % 10; 510 | reverso = reverso * 10 + digito; 511 | temp = Math.floor(temp / 10); 512 | } 513 | 514 | // Exercício 44 515 | let matriz1 = [ 516 | [1, 2], 517 | [3, 4], 518 | ]; // Altere estes valores para as matrizes desejadas. 519 | let matriz2 = [ 520 | [5, 6], 521 | [7, 8], 522 | ]; 523 | let soma = []; 524 | let i = 0; 525 | do { 526 | let j = 0; 527 | soma[i] = []; 528 | do { 529 | soma[i][j] = matriz1[i][j] + matriz2[i][j]; 530 | j++; 531 | } while (j < matriz1[i].length); 532 | i++; 533 | } while (i < matriz1.length); 534 | console.log(`A soma das matrizes é ${JSON.stringify(soma)}`); 535 | -------------------------------------------------------------------------------- /capitulo_5_es6_e_alem/script.js: -------------------------------------------------------------------------------- 1 | 2 | // Exercício 111 3 | 4 | function apresentacao(nome, sobrenome, idade) { 5 | return `Olá, meu nome é ${nome} ${sobrenome} e tenho ${idade} anos.`; 6 | } 7 | 8 | console.log(apresentacao("João", "Silva", 30)); // Saída: "Olá, meu nome é João Silva e tenho 30 anos." 9 | 10 | // Exercício 112 11 | 12 | function comparaValores(valorA, valorB) { 13 | let comparacao = valorA === valorB ? "igual" : (valorA > valorB ? "maior" : "menor"); 14 | return `O valor ${valorA} é ${comparacao} ao valor ${valorB}.`; 15 | } 16 | 17 | console.log(comparaValores(5, 3)); // Saída: "O valor 5 é maior ao valor 3." 18 | console.log(comparaValores(2, 2)); // Saída: "O valor 2 é igual ao valor 2." 19 | 20 | // Exercício 113 21 | 22 | function listaEnumerada(itens) { 23 | return itens.map((item, index) => `${index + 1}. ${item}`).join(', '); 24 | } 25 | 26 | console.log(listaEnumerada(['maçã', 'banana', 'uva'])); // Saída: "1. maçã, 2. banana, 3. uva" 27 | 28 | // Exercício 114 29 | 30 | function descricaoLivro(livro) { 31 | return `O livro '${livro.titulo}' foi escrito por ${livro.autor} em ${livro.ano}.`; 32 | } 33 | 34 | console.log(descricaoLivro({ titulo: 'O Principe', autor: 'Maquiavel', ano: 1532 })); // Saída: "O livro 'O Principe' foi escrito por Maquiavel em 1532." 35 | 36 | // Exercício 115 37 | 38 | const helloWorld = name => `Hello, ${name}!`; 39 | 40 | console.log(helloWorld("Alice")); // Esperado: "Hello, Alice!" 41 | console.log(helloWorld("Bob")); // Esperado: "Hello, Bob!" 42 | 43 | // Exercício 116 44 | 45 | const multiply = (a, b) => a * b; 46 | 47 | console.log(multiply(5, 4)); // Esperado: 20 48 | console.log(multiply(3, 7)); // Esperado: 21 49 | 50 | // Exercício 117 51 | 52 | const today = () => new Date().toDateString(); 53 | 54 | console.log(today()); // Retorna a data atual no formato: "Wed Jul 26 2023" 55 | 56 | // Exercício 118 57 | 58 | const sumArray = numbers => numbers.reduce((acc, curr) => acc + curr, 0); 59 | 60 | console.log(sumArray([1, 2, 3, 4])); // Esperado: 10 61 | console.log(sumArray([5, 5, 5])); // Esperado: 15 62 | 63 | // Exercício 119 64 | 65 | const personalizedMessage = ({ name, age }) => `Hello, my name is ${name} and I am ${age} years old.`; 66 | 67 | console.log(personalizedMessage({ name: "Alice", age: 30 })); // Esperado: "Hello, my name is Alice and I am 30 years old." 68 | console.log(personalizedMessage({ name: "Bob", age: 25 })); // Esperado: "Hello, my name is Bob and I am 25 years old." 69 | 70 | // Exercício 120 71 | 72 | const incrementer = base => () => ++base; 73 | 74 | const incrementBy5 = incrementer(5); 75 | console.log(incrementBy5()); // Esperado: 6 76 | console.log(incrementBy5()); // Esperado: 7 77 | 78 | // Exercício 121 79 | 80 | const concatFirstString = firstString => secondString => firstString + secondString; 81 | 82 | const helloString = concatFirstString("Hello "); 83 | console.log(helloString("World!")); // Esperado: "Hello World!" 84 | console.log(helloString("Alice!")); // Esperado: "Hello Alice!" 85 | 86 | // Exercício 122 87 | 88 | function informacoes(nome, idade, cidade = "Desconhecido") { 89 | return `Nome: ${nome}, Idade: ${idade}, Cidade: ${cidade}`; 90 | } 91 | 92 | console.log(informacoes("Carlos", 25)); // Nome: Carlos, Idade: 25, Cidade: Desconhecido 93 | console.log(informacoes("Ana", 30, "São Paulo")); // Nome: Ana, Idade: 30, Cidade: São Paulo 94 | 95 | // Exercício 123 96 | 97 | function soma(...nums) { 98 | return nums.reduce((acc, curr) => acc + curr, 0); 99 | } 100 | 101 | console.log(soma(1, 2, 3, 4)); // 10 102 | console.log(soma(5, 5, 10)); // 20 103 | 104 | // Exercício 124 105 | 106 | function copiaProfunda(obj) { 107 | return {...obj}; 108 | } 109 | 110 | const original = { nome: "Lucas", idade: 20 }; 111 | const copia = copiaProfunda(original); 112 | console.log(copia); // { nome: 'Lucas', idade: 20 } 113 | original.nome = "Rafael"; 114 | console.log(copia.nome); // Lucas 115 | 116 | // Exercício 125 117 | 118 | function combinarArrays(arr1, arr2) { 119 | return [...arr1, ...arr2]; 120 | } 121 | 122 | console.log(combinarArrays([1, 2, 3], [4, 5, 6])); // [1, 2, 3, 4, 5, 6] 123 | 124 | // Exercício 126 125 | 126 | function filtrarNumeros(...args) { 127 | return args.filter(arg => typeof arg === "number"); 128 | } 129 | 130 | console.log(filtrarNumeros(1, "a", 3, "b", 5)); // [1, 3, 5] 131 | 132 | // Exercício 127 133 | 134 | function mesclarObjetos(obj1, obj2) { 135 | return {...obj1, ...obj2}; 136 | } 137 | 138 | const objeto1 = { nome: "Lucas" }; 139 | const objeto2 = { idade: 30 }; 140 | console.log(mesclarObjetos(objeto1, objeto2)); // { nome: "Lucas", idade: 30 } 141 | 142 | // Exercício 128 143 | 144 | function criarCarro(modelo, marca = "Desconhecido", ano = new Date().getFullYear()) { 145 | return { marca, modelo, ano }; 146 | } 147 | 148 | console.log(criarCarro("Civic")); // { marca: "Desconhecido", modelo: "Civic", ano: 2023 } 149 | console.log(criarCarro("Civic", "Honda", 2020)); // { marca: "Honda", modelo: "Civic", ano: 2020 } 150 | 151 | // Exercício 129 152 | 153 | function unirArrays(...arrays) { 154 | return [].concat(...arrays); 155 | } 156 | 157 | console.log(unirArrays([1, 2], [3, 4], [5, 6])); // [1, 2, 3, 4, 5, 6] 158 | 159 | // Exercício 130 160 | 161 | function stringParaArray(str) { 162 | return [...str]; 163 | } 164 | 165 | console.log(stringParaArray("Hello")); // ["H", "e", "l", "l", "o"] 166 | 167 | // Exercício 131 168 | 169 | function filtrarPorChaves(arrayObjetos, chaves) { 170 | return arrayObjetos.map(obj => { 171 | let novoObj = {}; 172 | chaves.forEach(chave => { 173 | if(obj[chave] !== undefined) novoObj[chave] = obj[chave]; 174 | }); 175 | return novoObj; 176 | }); 177 | } 178 | 179 | const data = [{ nome: "Lucas", idade: 30, cidade: "São Paulo" }, { nome: "Ana", idade: 25 }]; 180 | console.log(filtrarPorChaves(data, ["nome", "cidade"])); // [{ nome: "Lucas", cidade: "São Paulo" }, { nome: "Ana" }] 181 | 182 | // Exercício 132 183 | 184 | function extrairDadosPessoa(pessoa) { 185 | const { nome, idade } = pessoa; 186 | return `Nome: ${nome}, Idade: ${idade}`; 187 | } 188 | 189 | const pessoa = { nome: "Lucas", idade: 30, cidade: "São Paulo" }; 190 | console.log(extrairDadosPessoa(pessoa)); // Nome: Lucas, Idade: 30 191 | 192 | // Exercício 133 193 | 194 | function extrairValores(array) { 195 | const [primeiro = null, segundo = null, terceiro = null] = array; 196 | return [primeiro, segundo, terceiro]; 197 | } 198 | 199 | console.log(extrairValores([1, 2])); // [1, 2, null] 200 | console.log(extrairValores([1, 2, 3, 4])); // [1, 2, 3] 201 | 202 | // Exercício 134 203 | 204 | function extrairCidade(usuario) { 205 | const { endereco: { cidade } } = usuario; 206 | return cidade; 207 | } 208 | 209 | const usuario = { nome: "Lucas", endereco: { rua: "Rua A", cidade: "São Paulo", estado: "SP" } }; 210 | console.log(extrairCidade(usuario)); // São Paulo 211 | 212 | // Exercício 135 213 | 214 | function exibirInformacoes({ nome, idade }) { 215 | return `Nome: ${nome}, Idade: ${idade}`; 216 | } 217 | 218 | const pessoa2 = { nome: "Ana", idade: 25 }; 219 | console.log(exibirInformacoes(pessoa2)); // Nome: Ana, Idade: 25 220 | 221 | // Exercício 136 222 | 223 | function separarNumeros(primeiro, segundo, terceiro, ...resto) { 224 | return [primeiro, segundo, terceiro, resto]; 225 | } 226 | 227 | console.log(separarNumeros(1, 2, 3, 4, 5, 6)); // [1, 2, 3, [4, 5, 6]] 228 | 229 | // Exercício 137 230 | 231 | let a = 5; 232 | let b = 10; 233 | [a, b] = [b, a]; 234 | 235 | console.log(a); // 10 236 | console.log(b); // 5 237 | 238 | // Exercício 138 239 | 240 | function extrairValoresAninhados(array) { 241 | const [[, valor1], [valor2]] = array; 242 | return [valor1, valor2]; 243 | } 244 | 245 | console.log(extrairValoresAninhados([[1, 2, 3], [4, 5]])); // [2, 4] 246 | 247 | // Exercício 139 248 | 249 | function renomearVariaveis(obj) { 250 | const { a: alpha, b: beta } = obj; 251 | return { alpha, beta }; 252 | } 253 | 254 | const objeto = { a: "valorA", b: "valorB" }; 255 | console.log(renomearVariaveis(objeto)); // { alpha: "valorA", beta: "valorB" } 256 | 257 | // Exercício 140 258 | 259 | class Tempo { 260 | constructor(horas = 0, minutos = 0, segundos = 0) { 261 | this.horas = horas; 262 | this.minutos = minutos; 263 | this.segundos = segundos; 264 | } 265 | 266 | somar(tempo) { 267 | let totalSegundos = this.segundos + tempo.segundos; 268 | let totalMinutos = this.minutos + tempo.minutos; 269 | let totalHoras = this.horas + tempo.horas; 270 | 271 | if (totalSegundos >= 60) { 272 | totalMinutos += Math.floor(totalSegundos / 60); 273 | totalSegundos %= 60; 274 | } 275 | if (totalMinutos >= 60) { 276 | totalHoras += Math.floor(totalMinutos / 60); 277 | totalMinutos %= 60; 278 | } 279 | 280 | return new Tempo(totalHoras, totalMinutos, totalSegundos); 281 | } 282 | 283 | subtrair(tempo) { 284 | let totalSegundos = this.segundos - tempo.segundos; 285 | let totalMinutos = this.minutos - tempo.minutos; 286 | let totalHoras = this.horas - tempo.horas; 287 | 288 | if (totalSegundos < 0) { 289 | totalMinutos -= Math.ceil(Math.abs(totalSegundos) / 60); 290 | totalSegundos = 60 - (Math.abs(totalSegundos) % 60); 291 | } 292 | if (totalMinutos < 0) { 293 | totalHoras -= Math.ceil(Math.abs(totalMinutos) / 60); 294 | totalMinutos = 60 - (Math.abs(totalMinutos) % 60); 295 | } 296 | 297 | return new Tempo(totalHoras, totalMinutos, totalSegundos); 298 | } 299 | } 300 | 301 | const tempo1 = new Tempo(1, 20, 30); 302 | const tempo2 = new Tempo(0, 50, 40); 303 | let resultado = tempo1.somar(tempo2); 304 | console.log(`${resultado.horas}h:${resultado.minutos}m:${resultado.segundos}s`); // 2h:11m:10s 305 | 306 | resultado = tempo1.subtrair(tempo2); 307 | console.log(`${resultado.horas}h:${resultado.minutos}m:${resultado.segundos}s`); // 0h:29m:50s 308 | 309 | // Exercício 141 310 | 311 | class Voador { 312 | voar() { 313 | return "Estou voando!"; 314 | } 315 | } 316 | 317 | class Nadador { 318 | nadar() { 319 | return "Estou nadando!"; 320 | } 321 | } 322 | 323 | class Pato extends Voador { 324 | constructor() { 325 | super(); 326 | const nadador = new Nadador(); 327 | this.nadar = nadador.nadar.bind(this); 328 | } 329 | } 330 | 331 | const pato = new Pato(); 332 | console.log(pato.voar()); // Estou voando! 333 | console.log(pato.nadar()); // Estou nadando! 334 | 335 | // Exercício 142 336 | 337 | class Animal { 338 | falar() { 339 | return "O animal faz um som"; 340 | } 341 | } 342 | 343 | class Cão extends Animal { 344 | falar() { 345 | return "O cão late"; 346 | } 347 | } 348 | 349 | class Gato extends Animal { 350 | falar() { 351 | return "O gato mia"; 352 | } 353 | } 354 | 355 | const cão = new Cão(); 356 | console.log(cão.falar()); // O cão late 357 | 358 | const gato = new Gato(); 359 | console.log(gato.falar()); // O gato mia 360 | 361 | // Exercício 143 362 | 363 | class Forma { 364 | area() { 365 | throw new Error("Método 'area' deve ser implementado por subclasses!"); 366 | } 367 | } 368 | 369 | class Círculo extends Forma { 370 | constructor(raio) { 371 | super(); 372 | this.raio = raio; 373 | } 374 | 375 | area() { 376 | return Math.PI * this.raio * this.raio; 377 | } 378 | } 379 | 380 | class Retângulo extends Forma { 381 | constructor(largura, altura) { 382 | super(); 383 | this.largura = largura; 384 | this.altura = altura; 385 | } 386 | 387 | area() { 388 | return this.largura * this.altura; 389 | } 390 | } 391 | 392 | const círculo = new Círculo(5); 393 | console.log(círculo.area()); // 78.53981633974483 394 | 395 | const retângulo = new Retângulo(4, 6); 396 | console.log(retângulo.area()); // 24 397 | 398 | // Exercício 144 399 | 400 | class Pessoa { 401 | constructor(nome, idade) { 402 | this.nome = nome; 403 | this._idade = idade; 404 | } 405 | 406 | get idade() { 407 | return this._idade; 408 | } 409 | 410 | set idade(valor) { 411 | if (valor < 0) { 412 | console.log("Idade não pode ser negativa!"); 413 | return; 414 | } 415 | this._idade = valor; 416 | } 417 | } 418 | 419 | const pessoa = new Pessoa("João", 30); 420 | console.log(pessoa.idade); // 30 421 | 422 | pessoa.idade = -5; // Idade não pode ser negativa! 423 | console.log(pessoa.idade); // 30 424 | 425 | // Exercício 145 426 | 427 | class Pessoa { 428 | constructor(nome) { 429 | this.nome = nome; 430 | } 431 | 432 | falar() { 433 | return `${this.nome} está falando.`; 434 | } 435 | } 436 | 437 | class Vendedor extends Pessoa { 438 | constructor(nome) { 439 | super(nome); 440 | this.totalVendas = 0; 441 | } 442 | 443 | vender() { 444 | this.totalVendas++; 445 | return `${this.nome} fez uma venda.`; 446 | } 447 | } 448 | 449 | const vendedor = new Vendedor("Carlos"); 450 | console.log(vendedor.vender()); // Carlos fez uma venda. 451 | console.log(vendedor.totalVendas); // 1 452 | 453 | // Exercício 146 454 | 455 | class Calculadora { 456 | static somar(a, b) { 457 | return a + b; 458 | } 459 | } 460 | 461 | console.log(Calculadora.somar(5, 3)); // 8 462 | 463 | // Exercício 147 464 | 465 | class Carro { 466 | constructor(tipo) { 467 | this.tipo = tipo; 468 | } 469 | 470 | static criarSedan() { 471 | return new Carro('Sedan'); 472 | } 473 | } 474 | 475 | const sedan = Carro.criarSedan(); 476 | console.log(sedan.tipo); // Sedan 477 | 478 | // Exercício 148 479 | 480 | class Conta { 481 | constructor(saldo) { 482 | this.saldo = saldo; 483 | } 484 | 485 | sacar(valor) { 486 | if (valor > this.saldo) { 487 | throw new Error('Saldo insuficiente.'); 488 | } 489 | this.saldo -= valor; 490 | return this.saldo; 491 | } 492 | } 493 | 494 | const conta = new Conta(100); 495 | console.log(conta.sacar(50)); // 50 496 | 497 | try { 498 | conta.sacar(100); 499 | } catch (e) { 500 | console.log(e.message); // Saldo insuficiente. 501 | } 502 | 503 | // Exercício 149 504 | 505 | class Segredo { 506 | #mensagemSecreta = "Esta é uma mensagem secreta!"; 507 | 508 | revelarSegredo() { 509 | return this.#mensagemSecreta; 510 | } 511 | } 512 | 513 | const segredo = new Segredo(); 514 | console.log(segredo.revelarSegredo()); // Esta é uma mensagem secreta! 515 | 516 | // Exercício 150 517 | 518 | class Veículo { 519 | constructor(marca, modelo) { 520 | this.marca = marca; 521 | this.modelo = modelo; 522 | } 523 | } 524 | 525 | class Carro extends Veículo { 526 | constructor(marca, modelo, numPortas) { 527 | super(marca, modelo); 528 | this.numPortas = numPortas; 529 | } 530 | } 531 | 532 | const carro = new Carro("Toyota", "Corolla", 4); 533 | console.log(carro); // { marca: 'Toyota', modelo: 'Corolla', numPortas: 4 } 534 | 535 | // Exercício 151 536 | 537 | function delay(ms) { 538 | return new Promise(resolve => setTimeout(resolve, ms)); 539 | } 540 | 541 | delay(1000).then(() => console.log('Resolvido após 1 segundo!')); 542 | 543 | // Exercício 152 544 | 545 | async function fetchData(input) { 546 | if (input === "error") { 547 | throw new Error("Entrada inválida!"); 548 | } 549 | return `Dados para ${input}`; 550 | } 551 | 552 | fetchData("data") 553 | .then(data => console.log(data)) 554 | .catch(err => console.error(err.message)); 555 | 556 | fetchData("error") 557 | .then(data => console.log(data)) 558 | .catch(err => console.error(err.message)); 559 | 560 | // Exercício 153 561 | 562 | function promise1() { 563 | return new Promise(resolve => setTimeout(() => resolve("Resultado 1"), 1000)); 564 | } 565 | 566 | function promise2() { 567 | return new Promise(resolve => setTimeout(() => resolve("Resultado 2"), 1500)); 568 | } 569 | 570 | Promise.all([promise1(), promise2()]) 571 | .then(results => console.log(results)) 572 | .catch(err => console.error(err.message)); // ["Resultado 1","Resultado 2"] 573 | 574 | // Exercício 154 575 | 576 | async function handleErrors(promise) { 577 | try { 578 | const result = await promise; 579 | console.log(result); 580 | } catch (error) { 581 | console.error(`Erro: ${error.message}`); 582 | } 583 | } 584 | 585 | const successfulPromise = Promise.resolve("Sucesso!"); 586 | const failingPromise = Promise.reject(new Error("Falha!")); 587 | 588 | handleErrors(successfulPromise); // Deve imprimir "Sucesso!" 589 | handleErrors(failingPromise); // Deve imprimir "Erro: Falha!" 590 | 591 | // Exercício 155 592 | 593 | async function fetchDataFromAPI(url) { 594 | let response = await fetch(url); 595 | if (response.status !== 200) { 596 | throw new Error("Falha na obtenção dos dados"); 597 | } 598 | return await response.json(); 599 | } 600 | 601 | // Teste (este é apenas um exemplo, e o URL pode precisar ser modificado) 602 | fetchDataFromAPI("https://api.example.com/data") 603 | .then(data => console.log(data)) 604 | .catch(err => console.error(err.message)); 605 | 606 | // Exercício 156 607 | 608 | function firstResolvedPromise(promises) { 609 | return Promise.race(promises); 610 | } 611 | 612 | const p1 = new Promise(resolve => setTimeout(() => resolve("Primeira"), 500)); 613 | const p2 = new Promise(resolve => setTimeout(() => resolve("Segunda"), 1000)); 614 | 615 | firstResolvedPromise([p1, p2]).then(result => console.log(result)); // Deve imprimir "Primeira" 616 | 617 | // Exercício 157 618 | 619 | async function fetchSequentialData(firstURL, secondURLGenerator) { 620 | let firstData = await fetchDataFromAPI(firstURL); 621 | let secondURL = secondURLGenerator(firstData); 622 | return await fetchDataFromAPI(secondURL); 623 | } 624 | 625 | // Suponha que a primeira API retorne um ID que é necessário para a segunda chamada de API 626 | fetchSequentialData("https://api.example.com/first", data => `https://api.example.com/second/${data.id}`) 627 | .then(result => console.log(result)) 628 | .catch(error => console.error(error.message)); 629 | 630 | // Exercício 158 631 | 632 | class DataLoader { 633 | constructor(apiURL) { 634 | this.apiURL = apiURL; 635 | this.data = null; 636 | } 637 | 638 | async loadData() { 639 | this.data = await fetchDataFromAPI(this.apiURL); 640 | } 641 | } 642 | 643 | // Nescessário uma API válida para testar 644 | const loader = new DataLoader("https://api.example.com/data"); 645 | loader.loadData() 646 | .then(() => console.log(loader.data)) 647 | .catch(err => console.error(err.message)); 648 | 649 | // Exercício 159 650 | 651 | function rejectAfterDelay(ms) { 652 | return new Promise((_, reject) => setTimeout(() => reject(new Error("Rejeitado após timeout!")), ms)); 653 | } 654 | 655 | rejectAfterDelay(1000).catch(err => console.error(err.message)); // Deve imprimir "Rejeitado após timeout!" 656 | 657 | // Exercício 160 658 | 659 | async function processInSequence(urls) { 660 | let results = []; 661 | for (let url of urls) { 662 | let data = await fetchDataFromAPI(url); 663 | results.push(data); 664 | } 665 | return results; 666 | } 667 | 668 | // Nescessário uma API válida para testar 669 | const urls = ["https://api.example.com/data1", "https://api.example.com/data2"]; 670 | processInSequence(urls) 671 | .then(data => console.log(data)) 672 | .catch(err => console.error(err.message)); 673 | 674 | // Exercício 161 675 | 676 | function* fibonacci() { 677 | let [prev, curr] = [0, 1]; 678 | while (true) { 679 | yield curr; 680 | [prev, curr] = [curr, prev + curr]; 681 | } 682 | } 683 | 684 | const fib = fibonacci(); 685 | console.log(fib.next().value); // 1 686 | console.log(fib.next().value); // 1 687 | console.log(fib.next().value); // 2 688 | console.log(fib.next().value); // 3 689 | 690 | // Exercício 162 691 | 692 | function* arithmeticSequence(start, reason, n) { 693 | for (let i = 0; i < n; i++) { 694 | yield start; 695 | start += reason; 696 | } 697 | } 698 | 699 | const sequence = arithmeticSequence(1, 2, 5); 700 | console.log([...sequence]); // [1, 3, 5, 7, 9] 701 | 702 | // Exercício 163 703 | 704 | function* paginate(array, batchSize) { 705 | for (let i = 0; i < array.length; i += batchSize) { 706 | yield array.slice(i, i + batchSize); 707 | } 708 | } 709 | 710 | const items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 711 | const pages = paginate(items, 4); 712 | console.log(pages.next().value); // [1, 2, 3, 4] 713 | console.log(pages.next().value); // [5, 6, 7, 8] 714 | console.log(pages.next().value); // [9, 10] 715 | 716 | // Exercício 164 717 | 718 | function* primeGenerator() { 719 | function isPrime(num) { 720 | for(let i = 2; i * i <= num; i++) 721 | if(num % i === 0) return false; 722 | return num > 1; 723 | } 724 | 725 | let num = 2; 726 | while (true) { 727 | if (isPrime(num)) yield num; 728 | num++; 729 | } 730 | } 731 | 732 | const primes = primeGenerator(); 733 | console.log(primes.next().value); // 2 734 | console.log(primes.next().value); // 3 735 | console.log(primes.next().value); // 5 736 | console.log(primes.next().value); // 7 737 | 738 | // Exercício 165 739 | 740 | function* alternateEvenOdd(array) { 741 | let evens = array.filter(x => x % 2 === 0); 742 | let odds = array.filter(x => x % 2 !== 0); 743 | let index = 0; 744 | 745 | while (index < evens.length || index < odds.length) { 746 | if (index < evens.length) yield evens[index]; 747 | if (index < odds.length) yield odds[index]; 748 | index++; 749 | } 750 | } 751 | 752 | const numbers = [1, 2, 3, 4, 5, 6, 7, 8]; 753 | const alternated = alternateEvenOdd(numbers); 754 | console.log([...alternated]); // [2, 1, 4, 3, 6, 5, 8, 7] 755 | 756 | // Exercício 166 757 | 758 | function* geometricSequence(a, r, n) { 759 | for (let i = 0; i < n; i++) { 760 | yield a; 761 | a *= r; 762 | } 763 | } 764 | 765 | const sequence = geometricSequence(1, 2, 5); 766 | console.log([...sequence]); // [1, 2, 4, 8, 16] 767 | 768 | // Exercício 167 769 | 770 | function* range(start, stop = null, step = 1) { 771 | if (stop === null) { 772 | stop = start; 773 | start = 0; 774 | } 775 | 776 | for (let i = start; i < stop; i += step) { 777 | yield i; 778 | } 779 | } 780 | 781 | console.log([...range(5)]); // [0, 1, 2, 3, 4] 782 | console.log([...range(2, 5)]); // [2, 3, 4] 783 | console.log([...range(0, 10, 2)]); // [0, 2, 4, 6, 8] 784 | 785 | // Exercício 168 786 | 787 | function* zip(...iterables) { 788 | const iterators = iterables.map(iterable => iterable[Symbol.iterator]()); 789 | while (true) { 790 | const items = iterators.map(iterator => iterator.next()); 791 | if (items.some(item => item.done)) break; 792 | yield items.map(item => item.value); 793 | } 794 | } 795 | 796 | const a = [1, 2, 3]; 797 | const b = ['a', 'b', 'c']; 798 | console.log([...zip(a, b)]); // [[1, 'a'], [2, 'b'], [3, 'c']] 799 | 800 | // Exercício 169 801 | 802 | function* fibonacci(n) { 803 | let [prev, curr] = [0, 1]; 804 | while (curr <= n) { 805 | yield curr; 806 | [prev, curr] = [curr, prev + curr]; 807 | } 808 | } 809 | 810 | console.log([...fibonacci(100)]); // [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] 811 | 812 | // Exercício 170 813 | 814 | function* enumerate(iterable) { 815 | let index = 0; 816 | for (const value of iterable) { 817 | yield [index, value]; 818 | index++; 819 | } 820 | } 821 | 822 | const letters = ['a', 'b', 'c']; 823 | console.log([...enumerate(letters)]); // [[0, 'a'], [1, 'b'], [2, 'c']] 824 | 825 | // Exercício 171 826 | 827 | function* arithmeticSequence(a, d, n) { 828 | for (let i = 0; i < n; i++) { 829 | yield a; 830 | a += d; 831 | } 832 | } 833 | 834 | const sequence = arithmeticSequence(1, 2, 5); 835 | console.log([...sequence]); // [1, 3, 5, 7, 9] 836 | 837 | // Exercício 172 838 | 839 | function filterOdd(numbers) { 840 | return numbers.filter(n => n % 2 !== 0); 841 | } 842 | 843 | console.log(filterOdd([1, 2, 3, 4, 5])); // [1, 3, 5] 844 | console.log(filterOdd([10, 12, 15])); // [15] 845 | 846 | // Exercício 173 847 | 848 | function findGreaterThanTen(numbers) { 849 | return numbers.find(n => n > 10); 850 | } 851 | 852 | console.log(findGreaterThanTen([1, 2, 12, 8, 15])); // 12 853 | 854 | // Exercício 174 855 | 856 | function findJavaScriptIndex(strings) { 857 | return strings.findIndex(s => s === "JavaScript"); 858 | } 859 | 860 | console.log(findJavaScriptIndex(["Java", "Python", "JavaScript", "C++"])); // 2 861 | 862 | // Exercício 175 863 | 864 | function areAllPositive(numbers) { 865 | return numbers.every(n => n > 0); 866 | } 867 | 868 | console.log(areAllPositive([1, 2, 3, 4, 5])); // true 869 | console.log(areAllPositive([-1, 2, 3, 4, 5])); // false 870 | 871 | // Exercício 176 872 | 873 | function doubleValues(numbers) { 874 | return numbers.map(n => n * 2); 875 | } 876 | 877 | console.log(doubleValues([1, 2, 3, 4])); // [2, 4, 6, 8] 878 | 879 | // Exercício 177 880 | 881 | function doesInclude(array, element) { 882 | return array.includes(element); 883 | } 884 | 885 | console.log(doesInclude(['a', 'b', 'c'], 'b')); // true 886 | console.log(doesInclude(['a', 'b', 'c'], 'z')); // false 887 | 888 | // Exercício 178 889 | 890 | function hasSmallerThanTen(numbers) { 891 | return numbers.some(n => n < 10); 892 | } 893 | 894 | console.log(hasSmallerThanTen([15, 20, 25])); // false 895 | console.log(hasSmallerThanTen([5, 20, 25])); // true 896 | 897 | // Exercício 179 898 | 899 | function stringToArray(str) { 900 | return Array.from(str); 901 | } 902 | 903 | console.log(stringToArray('hello')); // ['h', 'e', 'l', 'l', 'o'] 904 | 905 | // Exercício 180 906 | 907 | function concatArrays(arr1, arr2) { 908 | return arr1.concat(arr2); 909 | } 910 | 911 | console.log(concatArrays([1, 2], [3, 4])); // [1, 2, 3, 4] 912 | 913 | // Exercício 181 914 | 915 | function findOlderThan20(people) { 916 | return people.find(person => person.age > 20); 917 | } 918 | 919 | const samplePeople = [ 920 | {name: 'Alice', age: 18}, 921 | {name: 'Bob', age: 21}, 922 | {name: 'Charlie', age: 19} 923 | ]; 924 | 925 | console.log(findOlderThan20(samplePeople)); // {name: 'Bob', age: 21} 926 | 927 | // Exercício 182 928 | 929 | function areAllPositive(numbers) { 930 | return numbers.every(n => n > 0); 931 | } 932 | 933 | console.log(areAllPositive([1, 2, 3])); // true 934 | console.log(areAllPositive([-1, 2, 3])); // false 935 | 936 | // Exercício 183 937 | 938 | function filterEvens(numbers) { 939 | return numbers.filter(n => n % 2 === 0); 940 | } 941 | 942 | console.log(filterEvens([1, 2, 3, 4])); // [2, 4] 943 | 944 | // Exercício 184 945 | 946 | function joinWords(words) { 947 | return words.join(' '); 948 | } 949 | 950 | console.log(joinWords(['Hello', 'World'])); // 'Hello World' 951 | 952 | // Exercício 185 953 | 954 | function findDivisibleBy5(numbers) { 955 | return numbers.findIndex(n => n % 5 === 0); 956 | } 957 | 958 | console.log(findDivisibleBy5([2, 4, 7, 10, 11])); // 3 --------------------------------------------------------------------------------