{"id":230442,"date":"2022-11-26T14:06:00","date_gmt":"2022-11-26T11:06:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230442"},"modified":"2022-11-09T22:24:36","modified_gmt":"2022-11-09T19:24:36","slug":"removendo-itens-duplicados-com-javascript","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/removendo-itens-duplicados-com-javascript\/","title":{"rendered":"Removendo itens duplicados com JavaScript"},"content":{"rendered":"\n<p>\u00c0 medida que o ES6 se torna cada vez mais popular no desenvolvimento web, provavelmente veremos \u2013 e escreveremos \u2013 menos c\u00f3digo usando outras bibliotecas. Quando se trata de WordPress, jQuery ainda \u00e9 muito comum.<\/p>\n<p>Pessoalmente, n\u00e3o acho que haja algo inerentemente errado em usar <strong><a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jQuery<\/a><\/strong> (embora <strong><a href=\"http:\/\/youmightnotneedjquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">voc\u00ea possa n\u00e3o precisar<\/a><\/strong> ), mas tamb\u00e9m acho importante manter suas habilidades afiadas e atualizadas com as tecnologias mais recentes.<\/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=\"Removendo itens duplicados com JavaScript\" ><\/a><\/p>\n<p>Mas aprender a escrever c\u00f3digo ES6 n\u00e3o \u00e9 o objetivo deste post, nem \u00e9 como conseguir algo usando ES6.<\/p>\n<p>Em vez disso, ainda \u00e9 sobre WordPress e jQuery. Voltarei ao ES6 no final do post. Uma das coisas que eu adoraria abordar, por\u00e9m, \u00e9 como remover itens duplicados de uma lista com uma propriedade comum.<\/p>\n<h2>Removendo itens duplicados (via jQuery)<\/h2>\n<p>Mais especificamente, vamos supor que voc\u00ea tenha uma lista de itens \u2013 talvez seja uma lista ordenada, uma lista ordenada ou at\u00e9 mesmo um cont\u00eainer com um conjunto de filhos \u2013 e cada filho tenha um conjunto de propriedades.<\/p>\n<p>Essas propriedades podem ser atributos de classe, propriedades de dados personalizadas ou algo assim. Por exemplo, digamos que temos uma lista n\u00e3o ordenada e cada item filho tem uma propriedade <strong>data-id<\/strong>.<\/p>\n<p>Al\u00e9m disso, digamos que a lista de itens seja constru\u00edda a partir da resposta de qualquer API em que existam duplicatas nos dados. Claro, o lado do servidor deve lidar com isso, mas nos casos em que n\u00e3o \u00e9 feito, ainda pode ser feito no lado do 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\">Aqui est\u00e1 o c\u00f3digo<\/a><\/strong> para fazer isso com o coment\u00e1rio abaixo:<\/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>Observe o seguinte:<\/p>\n<ul>\n<li>a fun\u00e7\u00e3o aceita uma lista de itens encapsulada em jQuery com filhos,<\/li>\n<li>os filhos de um elemento <strong>data-id<\/strong> que \u00e9 usado para determinar se existem itens duplicados,<\/li>\n<li>configuramos um array para determinar se j\u00e1 vimos o item antes,<\/li>\n<li>se n\u00e3o, adicionamos \u00e0 lista; caso contr\u00e1rio, n\u00f3s o removemos,<\/li>\n<li>finalmente, retornamos a lista modificada e mais atualizada.<\/li>\n<\/ul>\n<p>E isso \u00e9 quase linha por linha o que o c\u00f3digo est\u00e1 fazendo.<\/p>\n<p>Pessoalmente, tento n\u00e3o usar instru\u00e7\u00f5es <strong>if\/else<\/strong> dentro do contexto de um loop (ou mesmo fora de um loop), mas h\u00e1 momentos em que n\u00e3o \u00e9 uma pr\u00e1tica ruim faz\u00ea-lo, e esse \u00e9 um deles.<\/p>\n<h2>Ent\u00e3o, o que foi isso sobre ES6?<\/h2>\n<p>Anteriormente, mencionei que o ES6 est\u00e1 em alta e \u00e9 algo que n\u00f3s, como desenvolvedores, devemos aprender. \u00c0 medida que continuar fazendo isso, talvez eu revisite este post e compartilhe como obter a mesma funcionalidade usando ES6 em vez de jQuery para mostrar como isso pode ser feito.<\/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=\"Removendo itens duplicados com JavaScript\" ><\/a><\/p>\n<p>Independentemente disso, se voc\u00ea estiver usando o WordPress e estiver usando jQuery nos anos em que foi usado, pe\u00e7o que voc\u00ea saia da biblioteca e aprenda alguns dos recursos mais recentes da linguagem.<\/p>\n<p>Pessoalmente, eu aprendo fazendo, e embora eu tivesse uma propens\u00e3o inicial para usar como padr\u00e3o o jQuery, optei por ir com o ES6 em um projeto no qual <strong><a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">estamos<\/a><\/strong> trabalhando atualmente por <strong><a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">insist\u00eancia de um colega de equipe<\/a><\/strong>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como remover itens duplicados em JavaScript usando jQuery (com uma 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":[722,733,846],"tags":[1170],"class_list":["post-230442","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-javascript-8","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=230442"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230442\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/164266"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=230442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=230442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=230442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}