{"id":230465,"date":"2022-11-26T14:02:00","date_gmt":"2022-11-26T11:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230465"},"modified":"2022-11-09T22:31:02","modified_gmt":"2022-11-09T19:31:02","slug":"paeaellekkaeisten-kohteiden-poistaminen-javascriptillae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/paeaellekkaeisten-kohteiden-poistaminen-javascriptillae\/","title":{"rendered":"P\u00e4\u00e4llekk\u00e4isten kohteiden poistaminen JavaScriptill\u00e4"},"content":{"rendered":"\n<p>Kun ES6:sta tulee yh\u00e4 suositumpi verkkokehityksess\u00e4, tulemme todenn\u00e4k\u00f6isesti n\u00e4kem\u00e4\u00e4n ja kirjoittamaan v\u00e4hemm\u00e4n koodia muiden kirjastojen avulla. Mit\u00e4 tulee WordPressiin, jQuery on edelleen hyvin yleinen.<\/p>\n<p>Henkil\u00f6kohtaisesti en usko, ett\u00e4 <strong><a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jQueryn<\/a><\/strong> k\u00e4yt\u00f6ss\u00e4 ole luonnostaan \u200b\u200bmit\u00e4\u00e4n vikaa (vaikka <strong><a href=\"http:\/\/youmightnotneedjquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">et ehk\u00e4 tarvitse sit\u00e4<\/a><\/strong> ), mutta mielest\u00e4ni on my\u00f6s t\u00e4rke\u00e4\u00e4 pit\u00e4\u00e4 taitosi ter\u00e4vin\u00e4 ja ajan tasalla uudempien teknologioiden kanssa.<\/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=\"P\u00e4\u00e4llekk\u00e4isten kohteiden poistaminen JavaScriptill\u00e4\" ><\/a><\/p>\n<p>Mutta ES6-koodin kirjoittamisen oppiminen ei ole t\u00e4m\u00e4n viestin tarkoitus, eik\u00e4 my\u00f6sk\u00e4\u00e4n se, kuinka saavuttaa jotain ES6:lla.<\/p>\n<p>Sen sijaan kyse on edelleen WordPressist\u00e4 ja jQueryst\u00e4. Palaan ES6:een viestin lopussa. Yksi asioista, joita haluaisin k\u00e4sitell\u00e4, on kuitenkin se, kuinka poistaa p\u00e4\u00e4llekk\u00e4iset kohteet luettelosta, jolla on yhteinen omaisuus.<\/p>\n<h2>P\u00e4\u00e4llekk\u00e4isten kohteiden poistaminen (jQueryn kautta)<\/h2>\n<p>Tarkemmin sanottuna oletetaan, ett\u00e4 sinulla on luettelo kohteista \u2013 ehk\u00e4 se on j\u00e4rjestetty luettelo, j\u00e4rjestetty luettelo tai jopa vain s\u00e4il\u00f6, jossa on joukko lapsia \u2013 ja jokaisella lapsella on joukko ominaisuuksia.<\/p>\n<p>N\u00e4m\u00e4 ominaisuudet voivat olla luokkaattribuutteja, mukautettuja dataominaisuuksia tai jotain vastaavaa. Oletetaan esimerkiksi, ett\u00e4 meill\u00e4 on j\u00e4rjest\u00e4m\u00e4t\u00f6n luettelo ja jokaisella alikohteella on <strong>data-id-<\/strong> ominaisuus.<\/p>\n<p>Oletetaan lis\u00e4ksi, ett\u00e4 kohteiden luettelo muodostetaan mink\u00e4 tahansa tietyn API:n vastauksesta, jos tiedoissa on kaksoiskappaleita. Toki palvelinpuolen pit\u00e4isi hoitaa t\u00e4m\u00e4, mutta tapauksissa, joissa se ei ole tehty, se voidaan silti tehd\u00e4 asiakaspuolella.<\/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\">T\u00e4ss\u00e4 on koodi<\/a><\/strong> sen tekemiseen ja sen alla oleva kommentti:<\/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>Huomaa seuraavat asiat:<\/p>\n<ul>\n<li>toiminto hyv\u00e4ksyy jQuery-k\u00e4\u00e4reen luettelon kohteista, joissa on lapsia,<\/li>\n<li><strong>data-id-<\/strong> elementin j\u00e4lkel\u00e4iset, joita k\u00e4ytet\u00e4\u00e4n m\u00e4\u00e4ritt\u00e4m\u00e4\u00e4n, onko olemassa p\u00e4\u00e4llekk\u00e4isi\u00e4 kohteita,<\/li>\n<li>m\u00e4\u00e4rit\u00e4mme taulukon m\u00e4\u00e4ritt\u00e4\u00e4ksemme, olemmeko n\u00e4hneet kohteen aiemmin,<\/li>\n<li>jos ei, lis\u00e4\u00e4mme sen luetteloon; muuten poistamme sen,<\/li>\n<li>lopuksi palautamme muokatun, p\u00e4ivitetyn luettelon.<\/li>\n<\/ul>\n<p>Ja t\u00e4m\u00e4 on melkein rivi rivilt\u00e4 mit\u00e4 koodi tekee.<\/p>\n<p>Henkil\u00f6kohtaisesti yrit\u00e4n olla k\u00e4ytt\u00e4m\u00e4tt\u00e4 <strong>if\/else<\/strong> -lauseita silmukan yhteydess\u00e4 (tai edes silmukan ulkopuolella), mutta toisinaan se ei ole huono k\u00e4yt\u00e4nt\u00f6, ja t\u00e4m\u00e4 on yksi niist\u00e4.<\/p>\n<h2>Joten mit\u00e4 se oli ES6: sta?<\/h2>\n<p>Aiemmin mainitsin, ett\u00e4 ES6 on nousussa ja se on jotain, mit\u00e4 meid\u00e4n kehitt\u00e4jien pit\u00e4isi oppia. Kun jatkan niin, ehk\u00e4 palaan t\u00e4h\u00e4n viestiin ja kerron, kuinka saada samat toiminnot ES6:lla jQueryn sijaan n\u00e4ytt\u00e4\u00e4kseni, kuinka se voidaan tehd\u00e4.<\/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=\"P\u00e4\u00e4llekk\u00e4isten kohteiden poistaminen JavaScriptill\u00e4\" ><\/a><\/p>\n<p>Siit\u00e4 huolimatta, jos k\u00e4yt\u00e4t WordPressi\u00e4 ja olet k\u00e4ytt\u00e4nyt jQuery\u00e4 vuosien ajan, jonka kanssa sit\u00e4 on k\u00e4ytetty, kehotan sinua astumaan kirjaston ulkopuolelle ja oppimaan joitain kielen uudempia ominaisuuksia.<\/p>\n<p>Henkil\u00f6kohtaisesti opin tekem\u00e4ll\u00e4, ja vaikka minulla oli alun perin taipumus k\u00e4ytt\u00e4\u00e4 oletusarvoisesti jQuery\u00e4, p\u00e4\u00e4tin valita ES6:n kanssa projektissa, jonka <strong><a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">parissa<\/a><\/strong> ty\u00f6skentelemme parhaillaan <strong><a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tiimitoverin kehotuksesta<\/a><\/strong>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>P\u00e4\u00e4llekk\u00e4isten kohteiden poistaminen JavaScriptist\u00e4 jQueryn avulla (ES6:ta koskeva huomautus).<\/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":[730,719,843],"tags":[1166],"class_list":["post-230465","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript-5","category-kehittaejae","category-opetusohjelmia","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=230465"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230465\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/164266"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}