11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Je vais essayer de vous expliquer ce que je souhaite faire.
J'ai établi 13 variables qui donnent un résultat chiffré chacune. Dans le cadre d'un tirage de cartes (tarot), les valeurs sont toutes comprises entre 1 et 22 pour chacune des variables.

J'aimerais maintenant comparer les résultats entre eux. Vérifier par exemple que la somme de deux variables peut faire 22 (et ensuite 17). Ensuite, refaire cela avec 3 variables.

Actuellement, dans ma réflexion, je récupère les variables dans un Array.

countmaison=[jour, mois, annee, m4, m5, m6, m7, m8,m9,m10,m11, m12, m13];

Ce qui me donne ceci (pour un cas précis) :

8,7,7,22,8,15,22,19,10,12,5,8,11

Ensuite, je me suis dit que je pourrais assembler chacune des valeurs avec les autres. Je crée donc un nouveau tableau avec toutes les paires possible :

var a = new Array(13);
		for (i = 0; i < countmaison.length; i++) {
			//var y=0;
			var	x=1;
			a[i]=new Array(13);
				//y++;
			for (j = 0; j < countmaison.length; j++){
				a[i][j]="["+ countmaison[i]+","+countmaison[j+x]+"]";
			}
			x++;
		}

Ce qui donne ceci (il y a un petit bug, mais rien de sérieux je crois)

[8,7],[8,7],[8,22],[8,8],[8,15],[8,22],[8,19],[8,10],[8,12],[8,5],[8,8],[8,11],[8,undefined],[7,7],[7,7],[7,22],[7,8],[7,15],[7,22],[7,19],[7,10],[7,12],[7,5],[7,8],[7,11],[7,undefined],[7,7],[7,7],[7,22],[7,8],[7,15],[7,22],[7,19],[7,10],[7,12],[7,5],[7,8],[7,11],[7,undefined],[22,7],[22,7],[22,22],[22,8],[22,15],[22,22],[22,19],[22,10],[22,12],[22,5],[22,8],[22,11],[22,undefined],[8,7],[8,7],[8,22],[8,8],[8,15],[8,22],[8,19],[8,10],[8,12],[8,5],[8,8],[8,11],[8,undefined],[15,7],[15,7],[15,22],[15,8],[15,15],[15,22],[15,19],[15,10],[15,12],[15,5],[15,8],[15,11],[15,undefined],[22,7],[22,7],[22,22],[22,8],[22,15],[22,22],[22,19],[22,10],[22,12],[22,5],[22,8],[22,11],[22,undefined],[19,7],[19,7],[19,22],[19,8],[19,15],[19,22],[19,19],[19,10],[19,12],[19,5],[19,8],[19,11],[19,undefined],[10,7],[10,7],[10,22],[10,8],[10,15],[10,22],[10,19],[10,10],[10,12],[10,5],[10,8],[10,11],[10,undefined],[12,7],[12,7],[12,22],[12,8],[12,15],[12,22],[12,19],[12,10],[12,12],[12,5],[12,8],[12,11],[12,undefined],[5,7],[5,7],[5,22],[5,8],[5,15],[5,22],[5,19],[5,10],[5,12],[5,5],[5,8],[5,11],[5,undefined],[8,7],[8,7],[8,22],[8,8],[8,15],[8,22],[8,19],[8,10],[8,12],[8,5],[8,8],[8,11],[8,undefined],[11,7],[11,7],[11,22],[11,8],[11,15],[11,22],[11,19],[11,10],[11,12],[11,5],[11,8],[11,11],[11,undefined]

Je voulais vérifier ensuite l'addition des paires correspondantes et la noter à peu près comme ça :

[10,12] : roue et pendu


Mais je ne parviens pas à faire quelque chose sauf planter mon script.
Alors je fais appel aux idées.
Merci de votre support.
Amusez-vous bien.
JENCAL a écrit :
Salut

Ton undifined c'est parce que tu fais

countmaison[j+x]

au lieu de
countmaison[j]

En effet, je croyais devoir incrémenter j... mais forcément, il n'y a pas besoin.
JENCAL a écrit :
Sinon, pourquoi ne pas tout faire d'un coup ?

https://codepen.io/JUSEN/pen/dyyqOYV?editors=1010

regarde dans le console log. j'ai mis que roue/pendu. mais si tu complète ça passe.


Merci!
Ce code m'a vraiment aidé...
J'ai bien avancé...
Les miroirs (c'est ainsi qu'on les appelle) s'affichent bien.

deux soucis subsistent...
--> les tableaux s'incrémentent en associant l'élément par lui-même.
--> cela crée des doublons
Je partage mon code actuel :

countmaison=[jour, mois, annee, m4, m5, m6, m7, m8,m9,m10,m11, m12, m13];

var obj = {
	1: "Le Bateleur",
	2: "La Papesse",
	3: "L'Impératrice",
	4: "Empereur",
	5: "Pape",
	6: "L'Amoureux",
	7: "Le Chariot",
	8: "La justice",
	9: "L'Hermite",
        10: "Roue de fortune",
	11: "La Force",
        12: "Le Pendu",
	13: "XIII",
	14: "Tempérance",
	15: "Le Diable",
	16: "La Maison-Dieu",
	17: "L'Etoile",
	18: "La Lune",
	19: "Le Soleil",
	20: "Le Jugement",
	21: "Le Monde",
	22: "Le Mat"
};

var tabmiroir = new Array(13);
		for (i = 0; i < countmaison.length; i++) {
			
			var	x=1;
			tabmiroir[i]=new Array(13);
				
			for (j = 0; j < countmaison.length; j++){
				tabmiroir[i][j]= countmaison[i]+ ":"+obj[countmaison[i]]+","+countmaison[j]+ ":"+obj[countmaison[j]];
				
				if(countmaison[i]+ countmaison[j] == 22 || countmaison[i]+ countmaison[j] == 44){
					var d1 = document.getElementById('miroir'); 
					//d1.insertAdjacentHTML('afterend', '<li> miroir'+ obj[countmaison[i]]+ ":"+obj[countmaison[j]]+"</li>");
					d1.insertAdjacentHTML('afterend', obj[countmaison[i]]+ ": "+obj[countmaison[j]]+'<li> <img src="images/'+countmaison[i]+'.jpg" /> : <img src="images/'+countmaison[j]+'.jpg"/></li>');
					
				}
			}
			
		}


			console.log(tabmiroir);

Je remets aussi les valeurs des variables du tableau :

countmaison=[8,7,7,22,8,15,22,19,10,12,5,8,11];
J'ai testé plusieurs fonctions (qui foisonnent sur le net) pour la suppression des doublons...
Ce qui me fait me rendre compte que ce ne sont pas vraiment des doublons qui me posent problèmes mais les "inverses"...
en effet j'obtiens :

"10:Roue de fortune,12:Le Pendu"
"12:Le Pendu,10:Roue de fortune"
J'ai réussi quelque chose... j'ai trouvé une fonction qui nettoie les doublons, et je parviens à la faire fonctionner dans mon .js...

Je ne parviens pas à lintégrer à ma boucle précédente...


var tabmiroir = new Array(13);
  for (i = 0; i < countmaison.length; i++) {
    tabmiroir[i] = new Array(13);
    for (j = 0; j < countmaison.length; j++) {	
      tabmiroir[i][j] = countmaison[i] + ":" + obj[countmaison[i]] + "," + countmaison[j] + ":" + obj[countmaison[j]];
		if (countmaison[i] + countmaison[j] == 22 || countmaison[i] + countmaison[j] == 44) {
        var d1 = document.getElementById('miroir');
        d1.insertAdjacentHTML('afterbegin', '<li class="mr-4"> <p>'+ obj[countmaison[i]] + ' : ' + obj[countmaison[j]] + '</p> <img src="images/'+tarot +'/' + countmaison[i] + '.jpg" /> : <img src="images/'+tarot +'/' + countmaison[j] + '.jpg"/></li>');
      }
    }  
  }
  console.log('Tableau de tous les miroirs selon le tableau countmaison :'+ tabmiroir);
function nettoieArray(array) {
  var i, j, len = array.length, out = [], obj = {};
  for (i = 0; i < len; i++) {
    obj[array[i]] = 0;
  }
  for (j in obj) {
    out.push(j);
  }
  return out;
}
	var newtabmiroir = nettoieArray(tabmiroir);
	console.log(newtabmiroir);

Vous auriez une piste pour moi svp?
Merci de votre support.
Voilà résolu... Smiley lol
J'ai juste "nettoyé" mon tableau de départ avant le traitement en deux parties.