{"id":230285,"date":"2022-11-26T13:59:00","date_gmt":"2022-11-26T10:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230285"},"modified":"2022-11-09T20:57:49","modified_gmt":"2022-11-09T17:57:49","slug":"suppression-des-elements-en-double-avec-javascript","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/suppression-des-elements-en-double-avec-javascript\/","title":{"rendered":"Suppression des \u00e9l\u00e9ments en double avec JavaScript"},"content":{"rendered":"\n<p>Comme ES6 devient de plus en plus populaire dans le d\u00e9veloppement Web, nous allons probablement voir \u2013 et \u00e9crire \u2013 moins de code en utilisant d&rsquo;autres biblioth\u00e8ques. En ce qui concerne WordPress, jQuery est encore tr\u00e8s courant.<\/p>\n<p>Personnellement, je ne pense pas qu&rsquo;il y ait quoi que ce soit de mal \u00e0 utiliser <strong><a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jQuery<\/a><\/strong> (bien que <strong><a href=\"http:\/\/youmightnotneedjquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vous n&rsquo;en ayez peut-\u00eatre pas besoin<\/a><\/strong> ), mais je pense \u00e9galement qu&rsquo;il est important de garder vos comp\u00e9tences pointues et \u00e0 jour avec les nouvelles technologies.<\/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=\"Suppression des \u00e9l\u00e9ments en double avec JavaScript\" ><\/a><\/p>\n<p>Mais apprendre \u00e0 \u00e9crire du code ES6 n&rsquo;est pas le but de cet article, ni comment r\u00e9aliser quelque chose en utilisant ES6.<\/p>\n<p>Au lieu de cela, il s&rsquo;agit toujours de WordPress et de jQuery. Je reviendrai sur ES6 \u00e0 la fin du post. L&rsquo;une des choses que j&rsquo;aimerais couvrir, cependant, est de savoir comment supprimer les \u00e9l\u00e9ments en double d&rsquo;une liste avec une propri\u00e9t\u00e9 commune.<\/p>\n<h2>Suppression des \u00e9l\u00e9ments en double (via jQuery)<\/h2>\n<p>Plus pr\u00e9cis\u00e9ment, supposons que vous ayez une liste d&rsquo;\u00e9l\u00e9ments &#8211; peut-\u00eatre une liste ordonn\u00e9e, une liste ordonn\u00e9e ou m\u00eame simplement un conteneur avec un ensemble d&rsquo;enfants &#8211; et chaque enfant a un ensemble de propri\u00e9t\u00e9s.<\/p>\n<p>Ces propri\u00e9t\u00e9s peuvent \u00eatre des attributs de classe, des propri\u00e9t\u00e9s de donn\u00e9es personnalis\u00e9es ou quelque chose comme \u00e7a. Par exemple, supposons que nous ayons une liste non ordonn\u00e9e et que chaque \u00e9l\u00e9ment enfant ait une propri\u00e9t\u00e9 <strong>data-id<\/strong>.<\/p>\n<p>De plus, disons que la liste des \u00e9l\u00e9ments est construite \u00e0 partir de la r\u00e9ponse d&rsquo;une API donn\u00e9e o\u00f9 des doublons existent dans les donn\u00e9es. Bien s\u00fbr, le c\u00f4t\u00e9 serveur devrait g\u00e9rer cela, mais dans les cas o\u00f9 ce n&rsquo;est pas fait, cela peut toujours \u00eatre fait c\u00f4t\u00e9 client.<\/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\">Voici le code<\/a><\/strong> pour le faire avec le commentaire ci-dessous:<\/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>Notez ce qui suit\u00a0:<\/p>\n<ul>\n<li>la fonction accepte une liste jQuery d&rsquo;\u00e9l\u00e9ments avec des enfants,<\/li>\n<li>les enfants d&rsquo;un \u00e9l\u00e9ment <strong>data-id qui est utilis\u00e9 pour d\u00e9terminer s&rsquo;il existe des \u00e9l\u00e9ments en double,<\/strong><\/li>\n<li>nous configurons un tableau pour d\u00e9terminer si nous avons d\u00e9j\u00e0 vu l&rsquo;\u00e9l\u00e9ment,<\/li>\n<li>sinon, nous l&rsquo;ajoutons \u00e0 la liste ; sinon, on l&rsquo;enl\u00e8ve,<\/li>\n<li>enfin, nous retournons la liste modifi\u00e9e, plus mise \u00e0 jour.<\/li>\n<\/ul>\n<p>Et c&rsquo;est presque ligne par ligne ce que fait le code.<\/p>\n<p>Personnellement, j&rsquo;essaie de ne pas utiliser d&rsquo;instructions <strong>if\/else<\/strong> dans le contexte d&rsquo;une boucle (ou m\u00eame en dehors d&rsquo;une boucle), mais il y a des moments o\u00f9 ce n&rsquo;est pas une mauvaise pratique de le faire, et c&rsquo;en est une.<\/p>\n<h2>Alors, qu&rsquo;en \u00e9tait-il de l&rsquo;ES6\u00a0?<\/h2>\n<p>Plus t\u00f4t, j&rsquo;ai mentionn\u00e9 que ES6 est en hausse et c&rsquo;est quelque chose que nous, en tant que d\u00e9veloppeurs, devrions apprendre. Comme je continue \u00e0 le faire, je vais peut-\u00eatre revoir ce post et partager comment obtenir la m\u00eame fonctionnalit\u00e9 en utilisant ES6 plut\u00f4t que jQuery pour montrer comment cela peut \u00eatre fait.<\/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=\"Suppression des \u00e9l\u00e9ments en double avec JavaScript\" ><\/a><\/p>\n<p>Quoi qu&rsquo;il en soit, si vous utilisez WordPress et que vous utilisez jQuery depuis des ann\u00e9es, je vous exhorte \u00e0 sortir de la biblioth\u00e8que et \u00e0 apprendre certaines des nouvelles fonctionnalit\u00e9s du langage.<\/p>\n<p>Personnellement, j&rsquo;apprends en faisant, et m\u00eame si j&rsquo;avais une propension initiale \u00e0 utiliser par d\u00e9faut jQuery, j&rsquo;ai opt\u00e9 pour ES6 dans un projet sur lequel <strong><a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nous<\/a><\/strong> travaillons actuellement \u00e0 <strong><a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la demande d&rsquo;un co\u00e9quipier<\/a><\/strong>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comment supprimer les \u00e9l\u00e9ments en double dans JavaScript \u00e0 l&rsquo;aide de jQuery (avec une note sur 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":[717,728,841],"tags":[1167],"class_list":["post-230285","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-javascript-3","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=230285"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230285\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/164266"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}