{"id":773,"date":"2024-07-30T20:54:57","date_gmt":"2024-07-30T18:54:57","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=773"},"modified":"2024-07-30T20:54:57","modified_gmt":"2024-07-30T18:54:57","slug":"002-sets","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/javascript\/javascript-practico\/09-nuevos-tipos-y-caracteristicas-en-javascript\/002-sets\/","title":{"rendered":"002. Sets"},"content":{"rendered":"\n<p>En el cap\u00edtulo anterior habl\u00e1bamos sobre los <strong>s\u00edmbolos<\/strong>, los cuales nos permit\u00edan crear <strong>propiedades privadas<\/strong> dentro de un <strong>objeto<\/strong>. En este cap\u00edtulo vamos a ver una estructura denominada <strong>Set<\/strong>. Este nuevo tipo de dato <strong>Set<\/strong> es una estructura similar a un <strong>Array<\/strong> pero la diferencia con \u00e9ste es que se trata de una <strong>estructura de datos \u00fanicos<\/strong>. Se trata por tanto de un <strong>Array<\/strong> <strong>Javascript<\/strong> mejorado, que s\u00f3lo acepta valores \u00fanicos, hablando de <strong>valores primitivos<\/strong>, porque si le pasamos objetos, en la memoria de <strong>Javascript<\/strong>, cada objeto es una referencia \u00fanica.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Crear un Set<\/h2>\n\n\n\n<p>Vamos a hacer un ejm para entenderlo mejor.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const set = new Set([1,2,3,3,4,true,false,false]);\n\nconsole.log(set);\n\/\/ No imprimir\u00e1 valores duplicados<\/pre>\n\n\n\n<p>El n\u00famero <em>3<\/em> s\u00f3lo aparecer\u00e1 una sola vez, al igual que el valor <em>false<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Agregar valores a un Set<\/h2>\n\n\n\n<p>Para ello tenemos el m\u00e9todo <strong><em>add()<\/em><\/strong>, de la siguiente manera.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const set = new Set();\nset.add(1);\nset.add(1);\nset.add({});\nconsole.log(set);\nconsole.log(set.size);<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Recorrer los elementos de un Set<\/h2>\n\n\n\n<p>Los elementos de un <strong>Set<\/strong> los podemos recorrer de varias maneras, mediante un loop <strong><em>forof<\/em><\/strong> o un bucle <strong><em>forEach<\/em><\/strong>, de la siguiente forma.<\/p>\n\n\n\n<p><strong>Ejm con forof<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for(item of set) {\n   console.log(item);\n}\n\/\/ Imprime los elementos<\/pre>\n\n\n\n<p><strong>Ejm con for Each<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">set.forEach(item =&gt; {\n   console.log(item);\n});<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Acceder a una posici\u00f3n espec\u00edfica<\/h2>\n\n\n\n<p>El constructor <strong>Array<\/strong> tiene un tipo de m\u00e9todo denominado <strong><em>from()<\/em><\/strong> que permite convertir un tipo de dato iterable (el tipo de dato que permite contar sus elementos, como son una <strong>cadena de texto<\/strong>, un <strong>Array<\/strong> o un <strong>objeto<\/strong>), en nuestro caso un tipo de dato <strong>Set<\/strong> (que tambi\u00e9n es iterable pero con caracter\u00edsticas distintas a los dem\u00e1s tipos) en un <strong>Array<\/strong>, de la siguiente forma.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">console.log(Array.from(set[o]));<\/pre>\n\n\n\n<p>Acabamos de transformar nuestra variable <em>set<\/em> (que es un tipo de dato <strong>Set<\/strong>) en un <strong>elemento iterable<\/strong> de tipo <strong>Array<\/strong>, por lo que podemos acceder a cada uno de los items de dicho <strong>Array<\/strong>.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const arr = Array.from(set);\nconsole.log(arr[0]);<\/pre>\n\n\n\n<p>Tenemos que guardar el <strong>Array<\/strong> que estamos creando en una variable, sino dar\u00e1 error.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota<\/strong>: el tipo de dato <strong>Set<\/strong> es un <strong>objeto<\/strong>, aunque tiene caracter\u00edsticas de un <strong>Array<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<p>Volvemos a tener la propiedad <strong><em>length<\/em><\/strong> en vez de la propiedad <strong><em>size<\/em><\/strong> que se utiliza en los <strong>Sets<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota<\/strong>: Los bucles <strong>forof<\/strong> y <strong>forEach<\/strong> funcionan con <strong>Sets<\/strong> porque ya vienen implementados para ello.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Eliminar valores<\/h2>\n\n\n\n<p>Los <strong>Sets<\/strong> tienen un m\u00e9todo especial para eliminar valores. Es el m\u00e9todo <strong><em>delete()<\/em><\/strong>. Veamos un ejm.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">set.delete(1);\n\/\/ Elimina el valor 1 de nuestro Set de valores<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Comprobar valores<\/h2>\n\n\n\n<p>Tenemos un m\u00e9todo denominado <strong><em>has()<\/em><\/strong> que comprueba si el valor existe en nuestro <strong>Set<\/strong>. Veamos un ejm.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">console.log(set.has(1));\n\/\/ Devuelve true si existe el valor 1, y false en caso contrario<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Limpiar un Set<\/h2>\n\n\n\n<p>Existe un m\u00e9todo para limpiar un <strong>Set<\/strong>, veamos un ejm.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">set.clear();\n\/\/ Elimina todos los elementos del Set set\nconsole.log(set);<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Resumen<\/h2>\n\n\n\n<p>Los m\u00e9todos que podemos utilizar con el tipo de dato Set son los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em>add()<\/em><\/strong>: agrega un valor a un <strong>Set<\/strong>.<\/li>\n\n\n\n<li><strong><em>delete()<\/em><\/strong>: elimina un valor de un <strong>Set<\/strong>.<\/li>\n\n\n\n<li><strong><em>clear()<\/em><\/strong>: limpia un <strong>Set<\/strong>.<\/li>\n\n\n\n<li><strong><em>has()<\/em><\/strong>: comprueba si existe un valor en un <strong>Set<\/strong>.<\/li>\n\n\n\n<li><strong><em>from()<\/em><\/strong>: para transformar un <strong>Set<\/strong> en un <strong>Array<\/strong> (hay que guardar la transformaci\u00f3n en una variable)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota<\/strong>: Las posibilidades de uso de este tipo de dato pueden ser varias. Con los <strong>Sets<\/strong> podemos no duplicar valores, como pueden ser <strong>emails<\/strong>, <strong>tel\u00e9fonos<\/strong>, <strong>DNIs<\/strong>&#8230;<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>En el cap\u00edtulo anterior habl\u00e1bamos sobre los s\u00edmbolos, los cuales nos permit\u00edan crear propiedades privadas dentro de un objeto. En [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":766,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-773","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"En el cap\u00edtulo anterior habl\u00e1bamos sobre los s\u00edmbolos, los cuales nos permit\u00edan crear propiedades privadas dentro de un objeto. En [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/773","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=773"}],"version-history":[{"count":2,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/773\/revisions"}],"predecessor-version":[{"id":775,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/773\/revisions\/775"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/766"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}