Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 23h07   #1
Invité de passage
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 3
Points : 3
Par défaut Question sur les tableaux (Array)

Bonjour

Voila je souhaite composer un tableau de village composé de plusieurs tableau de famille (famille 0 , etc), famille composé d'un tableau de personne avec trois champ "nom","prenom" et "age".

j'essai de composé ce tableau finale (village) a partir d'une page html et de javascript.

J'arrive a créer un tableau pour la première famille mais je n'arrive pas a trouvé l'astuce pour mettre la famille dans le tableau village et construire un nouvelle famille...

lol je pensais que cela serait plus simple a expliquer que cela l’histoire de village , famille, personne s'était pour simplifier mais bon je suis pas sur de l'effet....enfin bref voila le code...

Code :
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
<html>
<head>
<link href="style1.css" rel="stylesheet" type="text/css">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>test</title>
<script type="text/javascript">
var famille = [];
var village = [];
 
function ajoutpers()
{
	var nom = document.getElementById("nom").value;
	var prenom = document.getElementById("prenom").value;
	var age = document.getElementById("age").value;
 
	var pers = [];
	pers.push(nom,prenom,age);
	famille.push(pers);
	for(x=0;x<famille.length;x++)
	{
		alert(famille[x][0]+" "+famille[x][1]+" "+famille[x][2]);
	}
}
 
function creerfamille()
{
	village[0] = famille;
	alert(village[0][0][0]);	
}
 
</script>
</head>
<body>
<input type='text' id='nom' value=''><br>
<input type='text' id='prenom' value=''><br>
<input type='text' id='age' value=''>
<input type='button' value='ajout pers' onclick='ajoutpers();' />
<input type='button' value='créer famille' onclick='creerfamille();' />
</div>
</body>
</html>
donc en gros j'arrive pas a trouver comment mettre ma famille dans mon village et repartir a zéro pour une nouvelle famille.

D'avance merci pour votre aide
solenseb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 09h06   #2
Invité de passage
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 3
Points : 3
Je m'en suis finalement sortit en faisant differement le code
Code :
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
50
51
<html>
<head>
<link href="style1.css" rel="stylesheet" type="text/css">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>test</title>
<script type="text/javascript">
 
var famille = [];
var tabnb = [];
var num=0;
 
 
function ajoutpers()
{
	var nom = document.getElementById("nom").value;
	var prenom = document.getElementById("prenom").value;
	var age = document.getElementById("age").value;
 
	var pers = [];
	pers.push(num,nom,prenom,age);
	famille.push(pers);
}
 
function creerfamille()
{
	num++;	
}
 
function afffamille(x)
{
	for(i=0;i<famille.length;i++)
	{
		if(famille[i][0]==x)
		{
			alert(famille[i][1]);
		}
	}
}
 
</script>
</head>
<body>
<input type='text' id='nom' value=''><br>
<input type='text' id='prenom' value=''><br>
<input type='text' id='age' value=''>
<input type='button' value='ajout pers' onclick='ajoutpers();' />
<input type='button' value='créer famille' onclick='creerfamille();' />
<input type='button' value='créer famille' onclick='afffamille(1);' />
</div>
</body>
</html>
Je créer un champ suplémentaire qui correspond au numéro de ma famille que que j'incrémente pour une nouvelle.....cela m'oblige a parcourrir tout le tableau pour afficher une famille mais bon.

Si quelqu'un a une autre solution je suis preneur.
solenseb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 09h40   #3
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 071
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 071
Points : 45 201
Points : 45 201
une autre solution aurait été de passer par un array littéral
ou un objet json ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 22h28   #4
Invité de passage
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 3
Points : 3
Merci pour ta réponse SpaceFrog.

Ne voyant pas ce que tu entendais pas littéral, j'ai fait quelques recherches.

Mais cela ne m'aide pas vraiment pour trouver ta solution.

Le problème dans ma premiere idée c est que quand famille ce trouvé dans village[0] je le pensais sauvegardé mais en fait non si je vide famille le contenue de village[0] faisait de meme.

je découvre quoi

Tu pourrais m'éclaircir sur la solution pas tableau littéral ?
solenseb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 08h25   #5
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 071
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 071
Points : 45 201
Points : 45 201
un array littéral possède non pas des indexes numériques mais des indexes nommés
Code :
1
2
3
4
 
myArr= new Array();
myArr['Hello']="bonjour";
alert(myArr['hello'])
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 12h58   #6
Membre régulier
 
Inscription : décembre 2007
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 61
Points : 83
Points : 83
Citation:
Envoyé par SpaceFrog Voir le message
un array littéral possède non pas des indexes numériques mais des indexes nommés
Code :
1
2
3
4
 
myArr= new Array();
myArr['Hello']="bonjour";
alert(myArr['hello'])
Houla!!!!!

Désolé je vais être un peu direct, mais c'est un très mauvais conseil.

Déjà un "Array littéral" ce n'est pas ça on dit littéral en javascript les objets ou structures de données qui utilisent la "notation littérale".
Exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
// non littéral
var obj = new Object();
var arr = new Array();
var reg = new RegExp("abc");
var str = new String("str");
 
// littéral
var obj = {};
var arr = [];
var reg = /abc/;
var str = "str"
Donc quand tu fais
Code :
1
2
3
myArr= new Array();
myArr['Hello']="bonjour";
alert(myArr['hello'])
Déjà tu n'utilise pas de "tableau littéral" de plus tu semble confondre ceque tu appelle tableau litéral avec une Map, ou un "tableau associatif" en PHP.

Ce n'est pas du tout le cas, ce qui se passe réellement c'est que :

-1 : tu crée un tableau non littéral, ce tableau hérite de Object
- 2 : tu attribue une propriété à ce tableau (tu peux le faire car justement il hérite de Object)

Mais ton tableau est toujours vide !!

Code :
1
2
3
4
var arr = [];
arr['yo'] = 'yo';
arr.ya = 'ya';
console.log(arr, arr.yo, arr['ya']); // []   yo   ya
En gros tu utilise un tableau inutilement, car tout ce que tu utilise c'est l'interface Object.
Cela nuit à la lisibilité car l'on s'attend à ce que tu utilise un tableau, ce que tu ne fais pas, tu t'expose à des bugs car tu aura un comportement imprévisible si tu utilise des clés numériques, elle seront castés en Double et iront dans le tableau (au contraire des clés non numériques qui créeront des propriétées et non des valeurs dans le tableau).

Ex :

Code :
1
2
3
4
5
var arr = [];
arr['yo'] = 'yo';
arr.ya = 'ya';
arr['3'] = 'trois',
console.log(arr, arr.yo, arr['ya']); // [undefined, undefined, undefined, 'trois']   yo   ya
Pour que ton exemple soit correct il faut utiliser un objet (littéral ou non) :

Code :
1
2
3
4
5
6
7
8
9
var obj = new Object();
obj['hello']="bonjour";
alert(obj['hello']);
 
// ou
 
var obj = {};
obj.hello="bonjour";
alert(obj.hello);
TheGwy est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 15/12/2011, 13h08   #7
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 071
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 071
Points : 45 201
Points : 45 201
oui desolé abus de langage , je suggérais en fait le tableau associatif
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h21   #8
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Citation:
Envoyé par TheGwy Voir le message
...
t'es mon nouveau dieu toi, je vais t'engager pour m'apprendre le peu (j'espère) que j'ignore encore du javascript.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 15h42   #9
Membre régulier
 
Inscription : décembre 2007
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 61
Points : 83
Points : 83
merci
TheGwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 19h55   #10
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
On a le Chuck Norris du JavaScript avec nous

Juste une question TheGwy : quand tu dis « les clés numériques sont castées en Double », ça veut dire qu'elles sont castées en Number ?
Je viens de faire quelques tests et il me semble que les tableaux accordent un rôle particulier aux entiers, malgré que JS ne fait pas la distinction entre les entiers et les flottants.
Démonstration :
Code console :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> var a = []
[]
>>> a[0] = 0
0
>>> a['1'] = '1'
"1"
>>> a[2.0] = 2.0
2.0
>>> a['3.0'] = '3.0'
"3.0"
>>> a[4.5] = 4.5
3.5
>>> a['5.5'] = '5.5'
"5.5"
>>> a
[0, "1", 2]
Le 0, le '1' et le 2 sont passés. Je m'attendais à ce que le '3.0' passe aussi, mais apparemment il est resté à l'état de chaîne. Si je fais a['3.0'], je récupère bien la valeur '3.0'.
C'est d'autant plus troublant que '3.0' == 3 renvoie true De toute évidence, les clés ne sont pas castées en Double
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 08h30   #11
Invité de passage
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 3
Points : 3
Bonjour

Tout d'abord merci pour ce petit cours trés intéressant sur les tableaux.

Serait il possible de m'aiguiller sur une solution annexe à la mienne qui ne m'obligerait pas a parccourrir tout le tableau pour afficher tous les membres d'une famille.

D'avance merci
solenseb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 10h56   #12
Membre régulier
 
Inscription : décembre 2007
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 61
Points : 83
Points : 83
Citation:
Envoyé par Watilin Voir le message
On a le Chuck Norris du JavaScript avec nous

Juste une question TheGwy : quand tu dis « les clés numériques sont castées en Double », ça veut dire qu'elles sont castées en Number ?
Oui en Javascript il n'y a qu'un seul type numérique Number, qui correspond à un Double de 64 bits, j'utilise les deux termes de manière équivalente.

Citation:
Envoyé par Watilin Voir le message
Je viens de faire quelques tests et il me semble que les tableaux accordent un rôle particulier aux entiers, malgré que JS ne fait pas la distinction entre les entiers et les flottants. [...] De toute évidence, les clés ne sont pas castées en Double
Tu as tout à fait raison et je n'avais jamais remarqué cette subtilité.
Les indexs de tableaux ne sont pas castés en Double mais en uint32 (ce qui a bien plus de sens) :

Citation:
Norme ecma 262-3
15.4 Array Objects

Array objects give special treatment to a certain class of property names. A property name P (in the form of
a string value) is an array index if and only if ToString(ToUint32(P)) is equal to P
http://www.ecma-international.org/pu...ber%201999.pdf

Attention cela reste un type numérique qui n'est manipulable que par le moteur en interne, cela ne veut pas dire qu'il existe de vrais entiers en Javascript, seulement des Double.

Dans le même genre tu as un topic auquel j'ai répondu juste en dessous avec un problème similaire (shift binaire qui nécessite une conversion implicite et temporaire vers un int signé de 32 bits : http://www.developpez.net/forums/d11...ation-binaire/)
TheGwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 11h16   #13
Membre régulier
 
Inscription : décembre 2007
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 61
Points : 83
Points : 83
Citation:
Envoyé par solenseb Voir le message
Bonjour

Tout d'abord merci pour ce petit cours trés intéressant sur les tableaux.

Serait il possible de m'aiguiller sur une solution annexe à la mienne qui ne m'obligerait pas a parccourrir tout le tableau pour afficher tous les membres d'une famille.

D'avance merci
Comme l'a dit SpaceFrog plus haut (mais avec le mauvais terme) il faut que tu utilise des Objets plutôt que des tableaux.
Les objets au lieux d'avoir des indexs qui s'itèrent de manière séquentiels, ont des clés bien plus pratiques pour un accès aléatoire.

Cela te donnerait une structure du genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
var vilages = {
  "saint-jean-les-bains" : {
    "ledoux" : [
       {"prenom": "marc", "age": 32},
       {"prenom": "marie", "age": 30},
       {"prenom": "luca", "age": 8}
    ],
    "lepic" : [
       {"prenom": "jacques", "age": 88},
       {"prenom": "bernadette", "age": 76}
    ]
  },
  "marsoullin-du-gros" : {
    "dupont" : [
       {"prenom": "jean", "age": 58},
       {"prenom": "josette", "age": 50}
    ]
  }
}
Tu pourrais donc acceder à tes données ainsi :

Code :
1
2
 
villages[nomVillage][nomFamille]
TheGwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 19h48   #14
Invité de passage
 
Inscription : novembre 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 13
Points : 3
Points : 3
Merci beaucoup je vais tester avec cela
solenseb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h42.


 
 
 
 
Partenaires

Hébergement Web