├── README.md ├── challenges.js ├── data.js └── funcs ├── filter.js ├── find.js ├── forEach.js ├── map.js ├── reduce.js └── sort.js /README.md: -------------------------------------------------------------------------------- 1 | # ARRAY: HIGH ORDER FUNCTIONS 2 | 3 | ## O que é? 4 | 5 | Funções que recebem (ou retornam) outras funções. 6 | 7 | ## O que vamos ver? 8 | 9 | - Nada super avançado, mas prático. 10 | - Como escrever de maneira elegante (es6 arrow functions) 11 | -------------------------------------------------------------------------------- /challenges.js: -------------------------------------------------------------------------------- 1 | const { childrenAge, mailList, shopCart } = require("./data"); 2 | 3 | /** 4 | * Adicione o ano de nascimento das crianças para cada elemento do array 5 | */ 6 | const children = childrenAge.reduce((list, age) => { 7 | list.push({ 8 | age, 9 | birthYear: 2019 - age 10 | }); 11 | return [...list]; 12 | }, []); 13 | 14 | /** 15 | * Crie um array somente com os domínios da lista de email 16 | */ 17 | 18 | const domains = mailList.map(mail => { 19 | const mailArray = mail.split("@"); 20 | return mailArray[1]; 21 | }); 22 | 23 | /** 24 | * Encontre o maior preço dos produtos abaixo de 100 reais 25 | */ 26 | const bellow100 = shopCart 27 | .filter(product => product.unitPrice <= 100) 28 | .reduce((lastProductUnitPrice, currentProduct) => { 29 | if (lastProductUnitPrice > currentProduct.unitPrice) 30 | return lastProductUnitPrice; 31 | 32 | return currentProduct.unitPrice; 33 | }, 0); 34 | 35 | console.table(bellow100); 36 | -------------------------------------------------------------------------------- /data.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | childrenAge: [2, 0, 5, 8, 12, 17, 13, 7, 10], 3 | mailList: [ 4 | "robson@rocketseat.com", 5 | "fulano@gmail.com", 6 | "cleiton@rocketseat.com", 7 | "diego@rocketseat.com", 8 | "eu@adonis.com", 9 | "aloha@hawaii.com", 10 | "outro@emailqualquer.com" 11 | ], 12 | passengers: [ 13 | { name: "Ademar", birthYear: 1975 }, 14 | { name: "Tiago", birthYear: 1997 }, 15 | { name: "Eduarda", birthYear: 2004 }, 16 | { name: "Jessica", birthYear: 1984 }, 17 | { name: "Enzo", birthYear: 2015 }, 18 | { name: "Natan", birthYear: 2001 }, 19 | { name: "Ana", birthYear: 1995 } 20 | ], 21 | shopCart: [ 22 | { product: "sapato", quantity: 2, unitPrice: 118 }, 23 | { product: "tenis", quantity: 3, unitPrice: 89 }, 24 | { product: "bermuda", quantity: 1, unitPrice: 48 }, 25 | { product: "camiseta", quantity: 2, unitPrice: 25 } 26 | ] 27 | }; 28 | -------------------------------------------------------------------------------- /funcs/filter.js: -------------------------------------------------------------------------------- 1 | // FILTER 2 | const { childrenAge, mailList } = require("../data"); 3 | 4 | // 1. Crianças entre 2 - 11 anos 5 | 6 | const childrenFiltered = childrenAge.filter( 7 | element => element >= 2 && element <= 11 8 | ); 9 | 10 | // 2. Emails rocketseat.com.br 11 | const filteredMails = mailList.filter(mail => mail.includes("@rocketseat.com")); 12 | 13 | console.table(filteredMails); 14 | -------------------------------------------------------------------------------- /funcs/find.js: -------------------------------------------------------------------------------- 1 | // FIND 2 | const { passengers } = require("../data"); 3 | 4 | // 1. Encontre o passageiro de nome: "Enzo" 5 | const Enzo = passengers.find( 6 | passenger => passenger.name.toLowerCase() === "enzo" 7 | ); 8 | 9 | console.table(Enzo); 10 | -------------------------------------------------------------------------------- /funcs/forEach.js: -------------------------------------------------------------------------------- 1 | // FOREACH 2 | const { passengers } = require("../data"); 3 | // 1. Adicione a idade (age) para cada pessoa 4 | passengers.forEach(passenger => { 5 | passenger.age = 2019 - passenger.birthYear; 6 | }); 7 | 8 | console.table(passengers); 9 | -------------------------------------------------------------------------------- /funcs/map.js: -------------------------------------------------------------------------------- 1 | // MAP 2 | const { passengers } = require("../data"); 3 | 4 | // 1. Quantos anos eles tem? 5 | const newPassergers = passengers.map( 6 | passenger => `${passenger.name} tem ${2019 - passenger.birthYear} anos` 7 | ); 8 | 9 | // 2. Encontre o nome palíndromo 10 | const founds = passengers.map(passenger => { 11 | const reserveName = [].map 12 | .call(passenger.name, letter => letter) 13 | .reverse() 14 | .join(""); 15 | 16 | if (reserveName.toLowerCase() === passenger.name.toLowerCase()) 17 | return `This is palindromo: ${passenger.name}`; 18 | }); 19 | 20 | console.table(founds); 21 | -------------------------------------------------------------------------------- /funcs/reduce.js: -------------------------------------------------------------------------------- 1 | // Reduce 2 | const { shopCart } = require("../data"); 3 | // 1. Qual o valor total desse carrinho de compras 4 | const totalValue = shopCart.reduce( 5 | (acc, item) => acc + item.quantity * item.unitPrice, 6 | 0 7 | ); 8 | 9 | // 2. Quantidade total de produtos do carrinho 10 | const totalProducts = shopCart.reduce( 11 | (totalProduct, product) => totalProduct + product.quantity, 12 | 0 13 | ); 14 | 15 | console.table(totalProducts); 16 | -------------------------------------------------------------------------------- /funcs/sort.js: -------------------------------------------------------------------------------- 1 | // SORT 2 | const { shopCart, passengers } = require("../data"); 3 | // 1. Organize o carrinho do maior número de produtos para o menor 4 | const orderByTotalProducts = shopCart.sort((a, b) => b.quantity - a.quantity); 5 | 6 | // 2. Organize os passageiros por nome. 7 | const orderByPassengerName = passengers.sort((pa, pb) => { 8 | if (pa.name.toLocaleLowerCase() < pb.name.toLocaleLowerCase()) return -1; 9 | if (pa.name.toLocaleLowerCase() > pb.name.toLocaleLowerCase()) return 1; 10 | return 0; 11 | }); 12 | 13 | console.table(orderByPassengerName); 14 | --------------------------------------------------------------------------------