{"id":229732,"date":"2022-11-26T14:00:00","date_gmt":"2022-11-26T11:00:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229732"},"modified":"2022-11-09T16:08:43","modified_gmt":"2022-11-09T13:08:43","slug":"usuwanie-zduplikowanych-elementow-za-pomoca-javascript","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/usuwanie-zduplikowanych-elementow-za-pomoca-javascript\/","title":{"rendered":"Usuwanie zduplikowanych element\u00f3w za pomoc\u0105 JavaScript"},"content":{"rendered":"\n<p>Poniewa\u017c ES6 staje si\u0119 coraz bardziej popularny w tworzeniu stron internetowych, prawdopodobnie b\u0119dziemy widzie\u0107 \u2013 i pisa\u0107 \u2013 mniej kodu przy u\u017cyciu innych bibliotek. Je\u015bli chodzi o WordPress, jQuery jest nadal bardzo popularne.<\/p>\n<p>Osobi\u015bcie nie uwa\u017cam, \u017ce jest co\u015b z natury z\u0142ego w korzystaniu z <strong><a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jQuery<\/a><\/strong> (chocia\u017c <strong><a href=\"http:\/\/youmightnotneedjquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mo\u017cesz go nie potrzebowa\u0107<\/a><\/strong> ), ale uwa\u017cam r\u00f3wnie\u017c, \u017ce wa\u017cne jest, aby Twoje umiej\u0119tno\u015bci by\u0142y ostre i na bie\u017c\u0105co z nowszymi technologiami.<\/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=\"Usuwanie zduplikowanych element\u00f3w za pomoc\u0105 JavaScript\" ><\/a><\/p>\n<p>Ale nauka pisania kodu w ES6 nie jest celem tego postu, ani nie jest sposobem na osi\u0105gni\u0119cie czego\u015b za pomoc\u0105 ES6.<\/p>\n<p>Zamiast tego nadal chodzi o WordPress i jQuery. Wr\u00f3c\u0119 do ES6 na ko\u0144cu wpisu. Jedn\u0105 z rzeczy, kt\u00f3r\u0105 chcia\u0142bym om\u00f3wi\u0107, jest usuwanie zduplikowanych element\u00f3w z listy o wsp\u00f3lnej w\u0142a\u015bciwo\u015bci.<\/p>\n<h2>Usuwanie zduplikowanych element\u00f3w (poprzez jQuery)<\/h2>\n<p>M\u00f3wi\u0105c dok\u0142adniej, za\u0142\u00f3\u017cmy, \u017ce masz list\u0119 element\u00f3w \u2014 by\u0107 mo\u017ce jest to uporz\u0105dkowana lista, uporz\u0105dkowana lista lub nawet kontener z zestawem element\u00f3w potomnych \u2014 i ka\u017cdy element potomny ma zestaw w\u0142a\u015bciwo\u015bci.<\/p>\n<p>Te w\u0142a\u015bciwo\u015bci mog\u0105 by\u0107 atrybutami klasy, niestandardowymi w\u0142a\u015bciwo\u015bciami danych lub czym\u015b podobnym. Za\u0142\u00f3\u017cmy na przyk\u0142ad, \u017ce mamy list\u0119 nieuporz\u0105dkowan\u0105, a ka\u017cdy element podrz\u0119dny ma w\u0142a\u015bciwo\u015b\u0107 <strong>data-id<\/strong>.<\/p>\n<p>Ponadto za\u0142\u00f3\u017cmy, \u017ce lista element\u00f3w jest tworzona na podstawie odpowiedzi dowolnego danego interfejsu API, w kt\u00f3rym istniej\u0105 duplikaty danych. Oczywi\u015bcie, strona serwera powinna sobie z tym poradzi\u0107, ale w przypadkach, w kt\u00f3rych nie jest to zrobione, nadal mo\u017cna to zrobi\u0107 po stronie klienta.<\/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\">Oto kod<\/a><\/strong>, jak to zrobi\u0107, z komentarzem poni\u017cej:<\/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>Zwr\u00f3\u0107 uwag\u0119 na nast\u0119puj\u0105ce kwestie:<\/p>\n<ul>\n<li>funkcja akceptuje opakowan\u0105 w jQuery list\u0119 element\u00f3w z dzie\u0107mi,<\/li>\n<li>dzieci elementu <strong>identyfikatora danych<\/strong>, kt\u00f3ry s\u0142u\u017cy do okre\u015blenia, czy istniej\u0105 zduplikowane elementy,<\/li>\n<li>ustawiamy tablic\u0119, aby okre\u015bli\u0107, czy widzieli\u015bmy przedmiot wcze\u015bniej,<\/li>\n<li>je\u015bli nie, dodajemy go do listy; w przeciwnym razie usuwamy go,<\/li>\n<li>na koniec zwracamy zmodyfikowan\u0105, bardziej zaktualizowan\u0105 list\u0119.<\/li>\n<\/ul>\n<p>I to jest prawie wiersz po wierszu, co robi kod.<\/p>\n<p>Osobi\u015bcie staram si\u0119 nie u\u017cywa\u0107 instrukcji <strong>if\/else<\/strong> w kontek\u015bcie p\u0119tli (lub nawet poza p\u0119tl\u0105), ale zdarzaj\u0105 si\u0119 sytuacje, w kt\u00f3rych nie jest to z\u0142\u0105 praktyk\u0105, a to jest jedna z nich.<\/p>\n<h2>Wi\u0119c co to by\u0142o z ES6?<\/h2>\n<p>Wcze\u015bniej wspomnia\u0142em, \u017ce ES6 ro\u015bnie i jest to co\u015b, czego my, jako deweloperzy, powinni\u015bmy si\u0119 uczy\u0107. Poniewa\u017c nadal to robi\u0119, by\u0107 mo\u017ce powr\u00f3c\u0119 do tego postu i podziel\u0119 si\u0119 tym, jak osi\u0105gn\u0105\u0107 t\u0119 sam\u0105 funkcjonalno\u015b\u0107 przy u\u017cyciu ES6 zamiast jQuery, aby pokaza\u0107, jak mo\u017cna to zrobi\u0107.<\/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=\"Usuwanie zduplikowanych element\u00f3w za pomoc\u0105 JavaScript\" ><\/a><\/p>\n<p>Niezale\u017cnie od tego, je\u015bli korzystasz z WordPressa i od lat u\u017cywasz jQuery, zach\u0119cam Ci\u0119 do wyj\u015bcia poza bibliotek\u0119 i zapoznania si\u0119 z niekt\u00f3rymi nowszymi funkcjami j\u0119zyka.<\/p>\n<p>Osobi\u015bcie ucz\u0119 si\u0119 przez dzia\u0142anie i chocia\u017c pocz\u0105tkowo mia\u0142em sk\u0142onno\u015b\u0107 do domy\u015blnego korzystania z jQuery, zdecydowa\u0142em si\u0119 na ES6 w projekcie, nad kt\u00f3rym obecnie pracujemy <strong><a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">za<\/a><\/strong> <strong><a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">namow\u0105 kolegi z zespo\u0142u<\/a><\/strong>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jak usun\u0105\u0107 zduplikowane elementy w JavaScript za pomoc\u0105 jQuery (z dopiskiem o 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":[721,732,845],"tags":[1169],"class_list":["post-229732","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-javascript-7","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229732","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229732"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229732\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/164266"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}