Catégories

Récupérer les valeurs communes de 2 array en javascript

javascript-100

Des fois on a deux listes de valeurs, et on cherche uniquement les valeurs communes. La manière la plus simple à conceptualiser est de boucler sur toutes les valeurs du premier tableau et de vérifier si la valeur est présente dans le deuxième. Mais ce n’est pas la méthode la plus optimisée… Et pour faciliter le tout c’est en javascript que j’avais cette problématique.

        /**
         * Fonction pour récupérer les valeurs en commun de 2 array en Js
         * @param a
         * @param b
         * @returns {Array}
         */
        function getCommonValuesOnly(a, b)
        {
            //Trier les valeurs par ordre croissant :
            a = a.sort();
            b = b.sort();
            var ia = 0;
            var ib = 0;
            var result = [];

            while( ia < a.length && ib < b.length ){
                if      (a[ia] < b[ib] ){ ia++; }
                else if (a[ia] > b[ib] ){ ib++; }
                else /* valeur identique => on garde */
                {
                    result.push(a[ia]);
                    ia++;
                    ib++;
                }
            }
            return result;
        }

La méthode est ici de trier les deux listes de valeurs dans le même sens.

Ensuite on va parcourir  les deux listes en comparant les valeurs deux à deux.

Si les deux valeurs sont identiques : on la garde pour le résultat et on regarde la valeur suivante dans les deux listes.

Par contre si les deux valeurs sont différentes, on ne va bouger le curseur que sur une des deux listes : celle où la valeur est la plus petite. D’où l’importance de les avoir trié en premier lieu !

Cette fonction prend en entrée des array non associatifs pouvant contenir indistinctement des int et/ou des String.

J’avais développé cette fonction pour un besoin particulier. Il s’est avéré que la fonctionnalité n’a plus été nécessaire pour la suite du développement. Du coup, autant la mettre ici tant pour la sauvegarder pour une utilisation ultérieure que pour la mettre à disposition de gens qui en auraient besoin !

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.