{"id":230050,"date":"2022-11-26T13:43:00","date_gmt":"2022-11-26T10:43:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230050"},"modified":"2022-11-09T19:51:51","modified_gmt":"2022-11-09T16:51:51","slug":"eliminar-elementos-duplicados-con-javascript","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/eliminar-elementos-duplicados-con-javascript\/","title":{"rendered":"Eliminar elementos duplicados con JavaScript"},"content":{"rendered":"\n<p>A medida que ES6 se vuelve cada vez m\u00e1s popular en el desarrollo web, es probable que veamos y escribamos menos c\u00f3digo usando otras bibliotecas. Cuando se trata de WordPress, jQuery sigue siendo muy com\u00fan.<\/p>\n<p>Personalmente, no creo que haya nada intr\u00ednsecamente malo en el uso de <strong><a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jQuery<\/a><\/strong> (aunque <strong><a href=\"http:\/\/youmightnotneedjquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">es posible que no lo necesite<\/a><\/strong> ), pero tambi\u00e9n creo que es importante mantener sus habilidades afiladas y actualizadas con las tecnolog\u00edas m\u00e1s nuevas.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164265-61e762088909c.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164265-61e762088909c.png\" alt=\"Eliminar elementos duplicados con JavaScript\" ><\/a><\/p>\n<p>Pero aprender a escribir c\u00f3digo ES6 no es el prop\u00f3sito de esta publicaci\u00f3n, ni tampoco c\u00f3mo lograr algo usando ES6.<\/p>\n<p>En cambio, todav\u00eda se trata de WordPress y jQuery. Volver\u00e9 a ES6 al final de la publicaci\u00f3n. Sin embargo, una de las cosas que me encantar\u00eda cubrir es c\u00f3mo eliminar elementos duplicados de una lista con una propiedad com\u00fan.<\/p>\n<h2>Eliminaci\u00f3n de elementos duplicados (a trav\u00e9s de jQuery)<\/h2>\n<p>M\u00e1s espec\u00edficamente, supongamos que tiene una lista de elementos, tal vez sea una lista ordenada, una lista ordenada o incluso solo un contenedor con un conjunto de elementos secundarios, y cada elemento secundario tiene un conjunto de propiedades.<\/p>\n<p>Estas propiedades pueden ser atributos de clase, propiedades de datos personalizadas o algo as\u00ed. Por ejemplo, supongamos que tenemos una lista desordenada y cada elemento secundario tiene una propiedad <strong>de identificaci\u00f3n de datos<\/strong>.<\/p>\n<p>Adem\u00e1s, digamos que la lista de elementos se construye a partir de la respuesta de cualquier API dada donde existen duplicados en los datos. Claro, el lado del servidor debe manejar esto, pero en los casos en que no se hace, a\u00fan se puede hacer en el lado del cliente.<\/p>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c61553ce8e662776a4d1fb7e538de55f#file-00-removing-duplicate-children-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Aqu\u00ed est\u00e1 el c\u00f3digo<\/a><\/strong> para hacerlo con el comentario debajo:<\/p>\n<pre><code>\/**\n * Removes duplicates from the specified array of items; however, this function\n * assumes that $items is an unordered list of items with child elements.\n *\n * @param  $items An unordered list of products with duplicaten children.\n * @return $items An unordered list of products no duplicate children.\n *\n * @private\n *\/\nvar _removeDuplicates = function($items) {\n\n  var unique = {},\n      dataItemId = -1;\n\n  $items\n    .children()\n    .each(function() {\n      dataItemId = $(this).attr('data-id');\n      if (unique[dataItemId]) {\n        $(this).remove();\n      } else {\n        unique[dataItemId] = true;\n      }\n    });\n\n  return $item;\n};<\/code><\/pre>\n<p>Tenga en cuenta lo siguiente:<\/p>\n<ul>\n<li>la funci\u00f3n acepta una lista envuelta en jQuery de elementos con elementos secundarios,<\/li>\n<li>los elementos secundarios de un elemento <strong>de identificaci\u00f3n de datos<\/strong> que se utiliza para determinar si existen elementos duplicados,<\/li>\n<li>configuramos una matriz para determinar si hemos visto el elemento antes,<\/li>\n<li>si no, lo agregamos a la lista; de lo contrario, lo eliminamos,<\/li>\n<li>finalmente, devolvemos la lista modificada y m\u00e1s actualizada.<\/li>\n<\/ul>\n<p>Y eso es casi l\u00ednea por l\u00ednea lo que est\u00e1 haciendo el c\u00f3digo.<\/p>\n<p>Personalmente, trato de no usar declaraciones <strong>if\/else<\/strong> dentro del contexto de un bucle (o incluso fuera de un bucle), pero hay momentos en los que no es una mala pr\u00e1ctica hacerlo, y este es uno de ellos.<\/p>\n<h2>Entonces, \u00bfqu\u00e9 fue eso de ES6?<\/h2>\n<p>Anteriormente, mencion\u00e9 que ES6 est\u00e1 en aumento y es algo que nosotros, como desarrolladores, deber\u00edamos estar aprendiendo. A medida que contin\u00fae haci\u00e9ndolo, tal vez vuelva a visitar esta publicaci\u00f3n y comparta c\u00f3mo lograr la misma funcionalidad usando ES6 en lugar de jQuery para mostrar c\u00f3mo se puede hacer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164265-61e7620d6d683.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164265-61e7620d6d683.png\" alt=\"Eliminar elementos duplicados con JavaScript\" ><\/a><\/p>\n<p>De todos modos, si est\u00e1 usando WordPress y ha estado usando jQuery durante los a\u00f1os que se ha usado, le insto a que salga de la biblioteca y aprenda algunas de las caracter\u00edsticas m\u00e1s nuevas del lenguaje.<\/p>\n<p>Personalmente, aprendo haciendo, y aunque ten\u00eda una propensi\u00f3n inicial a usar jQuery de forma predeterminada, opt\u00e9 por ES6 en un proyecto en el que <strong><a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">estamos<\/a><\/strong> trabajando actualmente a <strong><a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">instancias de un compa\u00f1ero de equipo<\/a><\/strong>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo eliminar elementos duplicados en JavaScript usando jQuery (con una nota sobre ES6).<\/p>\n","protected":false},"author":1,"featured_media":164266,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716,727,840],"tags":[1172],"class_list":["post-230050","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-javascript-2","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230050","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=230050"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230050\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/164266"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230050"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230050"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}