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

  1. #1
    Rédacteur

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

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

    Informations forums :
    Inscription : février 2009
    Messages : 6 127
    Points : 22 199
    Points
    22 199
    Billets dans le blog
    63

    Par défaut Produit cartésien de n array

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    /*
     * Produit cartésien de n array
     * Wiki http://fr.wikipedia.org/wiki/Produit_cartésien
     * Daniel Hagnoul v1.0.0 2010-10-21
     */
    var produitCartesien = function(ts){
    	var tslength = ts.length;
     
    	if (tslength >= 2){
    		var r = tr(ts[0], ts[1]);
     
    		for (var n = 2; n < tslength; n++){
    			r = tr(r, ts[n]);
    		}
     
    		return(r.join());
    	}
     
    	function tr(t1, t2){
    		var t3 = [];
     
    		for (var i in t1) {
    			for (var j in t2) {
    				t3.push(t1[i] + '-' + t2[j]);
    			}
    		}
     
    		return t3;
    	}
     
    	return "Erreur, n < 2";
    };
     
    var ts = [
    	[ 'A', 'R', 'D', 'V', '10', '9', '8', '7', '6', '5', '4', '3', '2' ],
    	[ 'pique', 'cœur', 'carreau', 'trèfle'],
    	[ 'a', 'b', 'c', 'd', 'e'],
    	[ '01', '02', '03', '04', '05']
    ];
     
    console.log(produitCartesien(ts));

    Blog



    Nota bene : si vous devez être compatible avec les navigateurs obsolètes (IE8 et plus), vous devez convertir les codes ES2015 en ES5 avec Babel.

    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.)

  2. #2
    Rédacteur

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

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

    Informations forums :
    Inscription : février 2009
    Messages : 6 127
    Points : 22 199
    Points
    22 199
    Billets dans le blog
    63

    Par défaut

    Version ES2015 :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <script>
      "use strict";
     
      /*
       * Produit cartésien de n array
       * Daniel Hagnoul v1.1.0 2015-10-10
       */
      let produitCartesien = ( ts ) => {
        const
          tsL = ts.length,
          tr = ( t1, t2 ) => {
            let t3 = [];
     
            for ( let elemI of t1 ) {
              for ( let elemJ of t2 ) {
                t3.push( elemI + '-' + elemJ );
              }
            }
     
            return t3;
          };
     
        if ( tsL < 2 )
          throw `Erreur dans produitCartesien, ts.length ( ${ tsL } ) < 2`;
     
        let r = tr( ts[0], ts[1] );
     
        for ( let n = 2; n < tsL; n++ ){
          r = tr( r, ts[n] );
        }
     
        return {
          "length" : r.length,
          "arrayValue" : r,
          "stringValue" : r.join()
        };    
      };
     
      let
        ts = [
          [ 'A', 'R', 'D', 'V', '10', '9', '8', '7', '6', '5', '4', '3', '2' ],
          [ 'pique', 'c?ur', 'carreau', 'trèfle'],
          [ 'a', 'b', 'c', 'd', 'e'],
          [ '01', '02', '03', '04', '05']
        ],
        pc = produitCartesien( ts );
     
      console.log( pc.length, pc.arrayValue, pc.stringValue );
    </script>

    Blog



    Nota bene : si vous devez être compatible avec les navigateurs obsolètes (IE8 et plus), vous devez convertir les codes ES2015 en ES5 avec Babel.

    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.)

Discussions similaires

  1. Obtenir un produit cartésien
    Par pc75 dans le forum Excel
    Réponses: 10
    Dernier message: 07/04/2014, 08h51
  2. Produit Cartésien de n Array
    Par xenogaz dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/10/2010, 15h27
  3. Produit cartésien au lieu d'une jointure
    Par Smix007 dans le forum Débuter
    Réponses: 1
    Dernier message: 17/04/2008, 14h50
  4. [V 6.5.1] Produit cartésien
    Par pc75 dans le forum Deski
    Réponses: 7
    Dernier message: 10/07/2007, 10h17
  5. Réponses: 10
    Dernier message: 12/07/2006, 13h00

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