{"id":780,"date":"2024-07-30T20:58:12","date_gmt":"2024-07-30T18:58:12","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=780"},"modified":"2024-07-30T20:58:12","modified_gmt":"2024-07-30T18:58:12","slug":"005-iterables-iterators","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/javascript\/javascript-practico\/09-nuevos-tipos-y-caracteristicas-en-javascript\/005-iterables-iterators\/","title":{"rendered":"005. Iterables &amp; Iterators"},"content":{"rendered":"\n<p>En este cap\u00edtulo vamos a ver una caracter\u00edstica que tienen algunos de los tipos de datos, tanto de los nuevos como de los que ya exist\u00edan en <strong>Javascript<\/strong>. Vamos a hablar de los <strong>iterables<\/strong> y de los <strong>iteradores<\/strong>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Iterable<\/h2>\n\n\n\n<p>Cuando hablamos de que una <strong>variable<\/strong> es <strong>iterable<\/strong>, o que un <strong>tipo de dato<\/strong> es <strong>iterable<\/strong>, significa que es una estructura de datos lineal que hace que sus elementos sean p\u00fablicos y se puedan recorrer, por ejm, los <strong>Arrays<\/strong>, los <strong>String<\/strong>, los <strong>Maps<\/strong>, los <strong>Sets<\/strong>&#8230; e incluso los elementos del <strong>DOM<\/strong> como son los <strong>nodos del DOM<\/strong>. Al ser elementos <strong>iterables<\/strong> guardan algunas caracter\u00edsticas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Iterador<\/h2>\n\n\n\n<p>Lo que se conoce como <strong>iterador<\/strong> es la <strong>interfaz<\/strong>, una especie de <strong>apuntador<\/strong> que va recorriendo los elementos de la misma estructura de datos.<\/p>\n\n\n\n<p>Por lo tanto, <strong>iterable<\/strong> es el elemento el cual su contenido se puede recorrer, y el <strong>iterador<\/strong> es el apuntador que est\u00e1 recorriendo dichos elementos <strong>iterables<\/strong>, el mecanismo que los est\u00e1 recorriendo.<\/p>\n\n\n\n<p>En base a esto podemos tener diferentes mecanismos para recorrer o consumir un elemento <strong>iterable<\/strong>, como puede ser la <strong>destructuraci\u00f3n<\/strong>, los m\u00e9todos <em><strong>for<\/strong><\/em>, <strong><em>forof<\/em><\/strong>, <strong><em>forin<\/em><\/strong>, <strong><em>forEach<\/em><\/strong>, el m\u00e9todo <strong><em>array.from()<\/em><\/strong>, el <strong>spread operator<\/strong>, las <strong>promesas<\/strong>&#8230; Pero hay un elemento que es el <strong>iterador<\/strong>, y con un m\u00e9todo especial llamdo <strong><em>next()<\/em><\/strong> estar recorriendo cada uno de los elementos que tenga nuestra estructura iterable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Acceder a la interface del iterador<\/h2>\n\n\n\n<p>Veamos con un ejm como acceder a la interface del mismo <strong>iterador<\/strong>.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const iterable = \"[1,2,3,4,5]\";\n\n\/\/ Accedemos al iterador de nuestro iterable\nconst iterador = iterable[Symbol.iterator]();\n\nconsole.log(iterable);\nconsole.log(iterador);<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Recorrer cada uno de los elementos<\/h2>\n\n\n\n<p>Al tener el <strong>iterator<\/strong> guardado en la variable <em>iterador<\/em>, podemos ejecutar un m\u00e9todo especial que tiene el iterador, denominado <strong><em>next()<\/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\">console.log(iterador.next())<\/pre>\n\n\n\n<p>El iterador siempre va a devolver un <strong>objeto<\/strong> con dos <strong>propiedades<\/strong>, el valor como tal y un segundo par\u00e1metro que indica si ya se acabaron los elementos, se trata por tanto de una&nbsp; .<\/p>\n\n\n\n<p>Veamos un ejm para entender como funciona.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const iterable = [1,2,3,4,5];\n\n\/\/ Accedemos al iterador de nuestro iterable\nconst iterador = iterable[Symbol.iterator]();\n\nconsole.log(iterable);\nconsole.log(iterador);\n\n\/\/ Hacer un ciclo que recorra todos los iterables\nlet next = iterador.next();\n\nwhile (!next.done) {\n   console.log(next.value);\n   next = iterador.next();\n}<\/pre>\n\n\n\n<p>Esto es lo que se conoce como el iterador, que es una interfaz especial mediante la cual podemos acceder a todo tipo de datos que sean iterables.<\/p>\n\n\n\n<p>En el siguiente cap\u00edtulo vamos a ver una nueva sintaxis con un nuevo tipo de funci\u00f3n que se denominan <strong>generadores<\/strong>, que es una manera m\u00e1s sencilla de trabajar con los iteradores de nuestros tipos de datos que sean iterables.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este cap\u00edtulo vamos a ver una caracter\u00edstica que tienen algunos de los tipos de datos, tanto de los nuevos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":766,"menu_order":4,"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-780","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 este cap\u00edtulo vamos a ver una caracter\u00edstica que tienen algunos de los tipos de datos, tanto de los nuevos [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/780","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=780"}],"version-history":[{"count":1,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/780\/revisions"}],"predecessor-version":[{"id":781,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/780\/revisions\/781"}],"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=780"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}