{"id":1544,"date":"2015-04-15T12:23:38","date_gmt":"2015-04-15T10:23:38","guid":{"rendered":"http:\/\/cyol.fr\/blog\/?p=1544"},"modified":"2015-04-15T11:38:02","modified_gmt":"2015-04-15T09:38:02","slug":"recuperer-les-valeurs-communes-de-2-array-en-javascript","status":"publish","type":"post","link":"https:\/\/cyol.fr\/blog\/post\/recuperer-les-valeurs-communes-de-2-array-en-javascript\/","title":{"rendered":"R\u00e9cup\u00e9rer les valeurs communes de 2 array en javascript"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-1037 alignleft\" src=\"https:\/\/cyol.fr\/blog\/wp-content\/uploads\/billets\/icones\/javascript-100.png\" alt=\"javascript-100\" width=\"100\" height=\"99\" \/><\/p>\n<p>Des fois on a deux listes de valeurs, et on cherche <strong>uniquement<\/strong> les valeurs communes. La mani\u00e8re la plus simple \u00e0 conceptualiser est de boucler sur toutes les valeurs du premier tableau et de v\u00e9rifier si la valeur est pr\u00e9sente dans le deuxi\u00e8me. Mais ce n&rsquo;est pas la m\u00e9thode la plus optimis\u00e9e&#8230; Et pour faciliter le tout c&rsquo;est en javascript que j&rsquo;avais cette probl\u00e9matique.<!--more--><\/p>\n<pre class=\"brush:js\">        \/**\r\n         * Fonction pour r\u00e9cup\u00e9rer les valeurs en commun de 2 array en Js\r\n         * @param a\r\n         * @param b\r\n         * @returns {Array}\r\n         *\/\r\n        function getCommonValuesOnly(a, b)\r\n        {\r\n            \/\/Trier les valeurs par ordre croissant :\r\n            a = a.sort();\r\n            b = b.sort();\r\n            var ia = 0;\r\n            var ib = 0;\r\n            var result = [];\r\n\r\n            while( ia &lt; a.length &amp;&amp; ib &lt; b.length ){\r\n                if      (a[ia] &lt; b[ib] ){ ia++; }\r\n                else if (a[ia] &gt; b[ib] ){ ib++; }\r\n                else \/* valeur identique =&gt; on garde *\/\r\n                {\r\n                    result.push(a[ia]);\r\n                    ia++;\r\n                    ib++;\r\n                }\r\n            }\r\n            return result;\r\n        }<\/pre>\n<p>La m\u00e9thode est ici de trier les deux listes de valeurs dans le m\u00eame sens.<\/p>\n<p>Ensuite on va parcourir\u00a0 les deux listes en comparant les valeurs deux \u00e0 deux.<\/p>\n<p>Si les deux valeurs sont identiques : on la garde pour le r\u00e9sultat et on regarde la valeur suivante dans les deux listes.<\/p>\n<p>Par contre si les deux valeurs sont diff\u00e9rentes, on ne va bouger le curseur que sur une des deux listes : celle o\u00f9 la valeur est la plus petite. D&rsquo;o\u00f9 l&rsquo;importance de les avoir tri\u00e9 en premier lieu !<\/p>\n<p>Cette fonction prend en entr\u00e9e des array non associatifs pouvant contenir indistinctement des int et\/ou des String.<\/p>\n<p><em>J&rsquo;avais d\u00e9velopp\u00e9 cette fonction pour un besoin particulier. Il s&rsquo;est av\u00e9r\u00e9 que la fonctionnalit\u00e9 n&rsquo;a plus \u00e9t\u00e9 n\u00e9cessaire pour la suite du d\u00e9veloppement. Du coup, autant la mettre ici tant pour la sauvegarder pour une utilisation ult\u00e9rieure que pour la mettre \u00e0 disposition de gens qui en auraient besoin !<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Des fois on a deux liste de valeurs, et on cherche uniquement les valeurs communes. La mani\u00e8re la plus simple \u00e0 conceptualiser est de boucler sur toutes les valeurs du premier tableau et de v\u00e9rifier si la valeur est pr\u00e9sente dans le deuxi\u00e8me. Mais ce n&rsquo;est pas la m\u00e9thode la plus optimis\u00e9e&#8230; [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":1037,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,45,90],"tags":[62,116],"class_list":["post-1544","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpement","category-javascript","category-web","tag-developpement-2","tag-javascript","odd"],"_links":{"self":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/1544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/comments?post=1544"}],"version-history":[{"count":4,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/1544\/revisions"}],"predecessor-version":[{"id":1548,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/1544\/revisions\/1548"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/media\/1037"}],"wp:attachment":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/media?parent=1544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/categories?post=1544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/tags?post=1544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}