IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Différence entre deux tableaux


Sujet :

JavaScript

  1. #1
    agh
    agh est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 51
    Points : 49
    Points
    49
    Par défaut Différence entre deux tableaux
    Bonjour à tous,

    J'ai deux objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    array1 = [
      {
        host: "toto",
        time: "1234",
        descr: "bla bla bla"
      },
      {
        host: "tutu",
        time: "3456",
        descr: "blu blu blu"
      }
    ]
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    array2 = [
      {
        host: "toto",
        time: "1234",
        descr: "bla bla bla"
      },
      {
        host: "tutu",
        time: "3456",
        descr: "blu blu blu"
      },
      {
        host: "titi",
        time: "789",
        descr: "oh oh oh"
      }
    ]
    J'aimerai pouvoir faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var ajouter = difference (array2, array1) ;
    // ce qui donnerait :
    //[
    //  {
    //    host: "titi",
    //    time: "789",
    //    descr: "oh oh oh"
    //  }
    //]
    Voyez vous un moyen de faire ça simplement ?

    Je vous remercie
    Alexis
    ----------
    Delphi 7 Perso [FR]
    Windows XP Pro [FR]

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 201
    Points : 151
    Points
    151
    Par défaut
    Une piste peut etre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var difference = function(princ, second)
    {
      var diff = [], i, j, k, l, cle;
      for (i=0, l=princ.length; i<l; i++)
      {
        cles=Object.keys(princ[i]);
        for(j=0, k=cles.length; j<k; j++)
        {
          if ( second[i][cles[j]] === princ[i][cles[j]] ) continue;
          else
          {
            diff.push(second[i]);
            exit;
          };
        };
        return diff;
      };
    }

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    C'est une fonction limitée à un cas spécifique, mais on peut s'amuser avec du JS 1.8.5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    /*
     * L'array le plus long doit être dans tab1
     */
    var tabDif = function tabDif( tab1, tab2 ){
    	var tab3 = [];
     
    	if ( Array.isArray( tab1 ) && Array.isArray( tab2 ) ){
    		tab3 = tab1.filter( function( value, index ){
    			if ( this[ index ]  && value[ Object.keys( value )[ 0 ] ] === this[ index ][ Object.keys( this[ index ] )[ 0 ] ] ){
    				return false;
    			} else {
    				return true;
    			}
    		}, tab2 );
    	}
     
    	return tab3;
    };
     
    console.log( tabDif( array2, array1 ) );

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    agh
    agh est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 51
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup !

    La deuxième solution fonctionne parfaitement !
    Ne me reste plus qu'à la comprendre

    Merci encore.
    Alexis
    ----------
    Delphi 7 Perso [FR]
    Windows XP Pro [FR]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre en rouge les différences entre deux tableaux
    Par Yobi1993 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/05/2013, 08h05
  2. différence entre deux tableaux
    Par ledisciple dans le forum Langage
    Réponses: 11
    Dernier message: 29/04/2011, 18h52
  3. [PHP 5.0] Différence entre deux tableaux d'objets (array_diff_uassoc)
    Par shawn12 dans le forum Langage
    Réponses: 4
    Dernier message: 22/11/2009, 15h14
  4. [Tableaux] Différence entre deux syntaxes
    Par baggie dans le forum Langage
    Réponses: 23
    Dernier message: 30/04/2008, 14h05
  5. Résultats erroné différence entre deux types TDateTime
    Par Alghero dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/03/2004, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo