DESENVOLVIMENTO DE SISTEMAS CORPORATIVOS JAVASCRIPT Yuri Malheiros (yuri@dcx.ufpb.br) SETS Um Set é uma lista de valores que não possui valores duplicados Normalmente você não acessa itens individuais num Set É mais comum checar se um item está presente ou não Para criar um Set usa-se new Set() Para adicionar um elemento usa-se o método add() Para checar o tamanho do Set usa-se a propriedade size let set = new Set(); set.add(5); console.log(set.size); SETS Elementos repetidos não são adicionados pelo método add() let set = new Set(); set.add(5); set.add(5); console.log(set.size); O tamanho continua sendo 1 SETS Sets não fazem conversões implícitas para determinar se os elementos são iguais let set = new Set(); set.add(5); set.add("5"); console.log(set.size); O tamanho nesse caso é 2 SETS Objetos também podem ser adicionados aos Sets let set = new Set(); set.add({name: "João"}); set.add({name: "José"}); console.log(set.size); Não é feita uma comparação deep para verificar igualdade entre objetos let set = new Set(); set.add({name: "João"}); set.add({name: "João"}); console.log(set.size); O tamanho nos dois casos é 2 SETS É possível iniciar um Set usando um array Elementos repetidos são ignorados let set = new Set([1, 2, 3, 4, 5, 5, 5, 5]); console.log(set.size); SETS Para verificar se um valor faz parte de um Set usa-se o método has() let set = new Set(); set.add(4); set.add(5); console.log(set.has(5)); console.log(set.has(6)); // true // false SETS Para remover um valor usa-se o método delete() Podemos remover todos os valores usando o método clear() let set = new Set(); set.add(4); set.add(5); console.log(set.has(5)); // true set.delete(5); console.log(set.has(5)); // false console.log(set.size); // 1 set.clear(); console.log(set.has(4)); // false console.log(set.size); // 0 SETS Podemos varrer um Set usando o método forEach() A função callback recebe três parâmetros: O valor do elemento, o valor do elemento novamente e o próprio Set let set = new Set([1, 2]); set.forEach(function(value, key, ownerSet) { console.log(key + " " + value); console.log(ownerSet === set); }); SETS É possível converter um Set para um array utilizando o operador spread let set = new Set([1, 2, 3, 3, 3, 4, 5]); let array = [...set]; console.log(array); MAPS Um Map é uma lista ordenada de pares chave-valor A chave e o valor podem ser de qualquer tipo, inclusive objetos Um valor pode ser adicionado usando o método set() passando a chave e o valor Um valor pode ser recuperado usando o método get() passando a chave let map = new Map(); map.set("title", "UFPB"); map.set("year", 2017); console.log(map.get("title")); console.log(map.get("year")); // "UFPB" // 2017 MAPS Os Maps possuem os métodos: has(key), verifica se a chave existe no Map delete(key), remove uma chave e o seu valor associado clear(key), remove todas as chaves e valores do Map size(), retorna o número de pares chave-valor contidos no Map let map = new Map(); map.set("name", "Nicholas"); map.set("age", 25); console.log(map.size); // 2 console.log(map.has("name")); // true console.log(map.get("name")); // "Nicholas" map.delete("name"); console.log(map.has("name")); // false console.log(map.get("name")); // undefined console.log(map.size); // 1 MAPS Podemos inicializar um Map através de arrays let map = new Map([["name", "Nicholas"], ["age", 25]]); console.log(map.has("name")); // true console.log(map.get("name")); // "Nicholas" console.log(map.has("age")); // true console.log(map.get("age")); // 25 console.log(map.size); // 2 O parâmetro passado é um array de arrays Cada array dentro do array é um par que representa a chave e o valor MAPS Podemos varrer um Map usando o método forEach() A função callback recebe três parâmetros: O valor do elemento, a chave e o próprio Map let map = new Map([ ["name", "Nicholas"], ["age", 25]]); map.forEach(function(value, key, ownerMap) { console.log(key + " " + value); console.log(ownerMap === map); }); FOR Usando ES6 podemos criar laços usando for-in e for-of O for-in itera sobre os índices ou chaves let x = ["a", "b", "c"]; let y = {name: "João", age: 30}; for (let index in x) { console.log(index); } for (let key in y) { console.log(key); } FOR Usando ES6 podemos criar laços usando for-in e for-of O for-of itera sobre os valores let x = ["a", "b", "c"]; for (let value of x) { console.log(value); } Por uma questão de implementação o for-of não funciona com objetos literais REFERÊNCIAS https://babeljs.io/learn-es2015/ https://leanpub.com/understandinges6/read https://github.com/getify/You-Dont-KnowJS/blob/master/es6%20&%20beyond/README.md