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 10/10/2011, 15h57   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 35
Points : 10
Points : 10
Par défaut boucle for sur array

Bonjour à tous,

je rencontre un problème très bizarre...

le code posant problème est le suivant
Code :
1
2
3
4
5
6
7
8
9
10
var patt = /[^=&]+=[^&]+/gi;
var match = url[1].match(patt);
var arr = Array();
out = Array();
for ( i in match ) {
	if ( match[i] != null ) {
		arr = match[i].split("=",2);
		out.push(arr[0]+'='+encodeURIComponent(arr[1]));
	}
}
en entrée nous avons
url[1] de type string
Code :
act=connexion&login=rebel&password=1234
on découpe ce string avec la méthode match
et on obtient un tableau match de la forme
Code :
1
2
3
0: "act=connexion"
1: "login=rebel"
2: "password=1234"
alors se lance la boucle for
les valeurs de i passent de 0 à 2 sans problème..

une fois la exécutée pour la valeur 2, normalement la boucle devrait s'arrêter, cependant, i prend une nouvelle valeur qui est "each"...

est-ce normal ?
Si oui, pourquoi ?
Si non, sauriez vous d'ou cela pourrait venir ?

Merci d'avance pour votre aide
rebel29270 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 16h11   #2
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 040
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 040
Points : 45 141
Points : 45 141
il est fortement deconseillé d'utilser comme noms de variables des mots réservés du langages javascript ...

var match ...
__________________
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 10
Vieux 10/10/2011, 16h15   #3
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
Regarde du coté de hasOwnProperty().
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/10/2011, 16h25   #4
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 35
Points : 10
Points : 10
Citation:
Envoyé par SpaceFrog Voir le message
il est fortement deconseillé d'utilser comme noms de variables des mots réservés du langages javascript ...

var match ...
testé avec autre variable, ca ne change rien


Citation:
Envoyé par Bovino Voir le message
Regarde du coté de hasOwnProperty().
je n'ai plus le problème mais après avoir passé les variables 0 à 2 dans i j'obtiens
Code :
1
2
3
4
5
6
7
8
9
each
eachSlice
all
any
collect
detect
findall
grep
...
cela ressemble à toutes les varriables qui sont dans __proto__ dans le "developper tool" de google chrome ...

je n'ais jamais rencontré ce problème avant ...
rebel29270 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 16h26   #5
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

Faut aussi prendre en considération l'éventuelle présence d'une ancre dans l'URL.

Exemple simplifié (sans expression rationnelle)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var i,str,url,parm,nfo=[];
 
str='http://exemple.com/directory/file.php?act=connexion&login=rebel&password=1234#anchor';
 
url=str.split('?');
if(url.length>1){
	// url[0] = http://exemple.com/directory/file.php
	// url[1] = act=connexion&login=rebel&password=1234#anchor
 
	parm=url[1].split('#');
	// parm[0] = act=connexion&login=rebel&password=1234
	// parm[1] = anchor
 
	nfo=parm[0].split('&');
	// nfo[0] = act=connexion
	// nfo[1] = login=rebel
	// nfo[2] = password=1234
 
	// Vérification du résultat
	str='';
	for(i in nfo)str+=nfo[i]+'\n';
	alert(str);
}
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/10/2011, 16h30   #6
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 040
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 040
Points : 45 141
Points : 45 141
http://javascript.developpez.com/faq...vig#RecupParam
__________________
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 10
Vieux 10/10/2011, 16h34   #7
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 35
Points : 10
Points : 10
Citation:
Envoyé par Eric2a Voir le message
Faut aussi prendre en considération l'éventuelle présence d'une ancre dans l'URL.
Il n'y en aura pas, c'est pour de l'ajax
rebel29270 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 16h39   #8
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 35
Points : 10
Points : 10
merci pour le lien

la question maintenant est : mais pourquoi la fonction for me retourne les "__proto__" de cet élément alors qu'il ne le fait pas avec d'autres méthodes ?
rebel29270 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 16h39   #9
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
En tout cas, pour un tableau, il est préférable de faire une boucle for classique en récupérant le length du tableau qu'une boucle for in.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/10/2011, 16h42   #10
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 35
Points : 10
Points : 10
Citation:
Envoyé par Bovino Voir le message
En tout cas, pour un tableau, il est préférable de faire une boucle for classique en récupérant le length du tableau qu'une boucle for in.
Ca c'est une idée super simple et super bonne

merci

Rappel de la question : mais pourquoi la fonction for me retourne les "__proto__" de cet élément alors qu'il ne le fait pas avec d'autres méthodes ?
rebel29270 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 16h43   #11
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 574
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 574
Points : 4 077
Points : 4 077
Si le contexte d'exécution empêche d'utiliser for...in (quelles que soient les raisons), envisage peut-être (si ce n'est déjà fait) de boucler avec un for "classique" et les indices numériques... non ?

edit : qui a dit "t'es à la bourre de 4 minutes" ?
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/10/2011, 16h47   #12
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
Citation:
Envoyé par rebel29270
mais pourquoi la fonction for me retourne les "__proto__" de cet élément alors qu'il ne le fait pas avec d'autres méthodes ?
for in va faire une boucle sur toutes les propriétés et méthodes d'un objet.
Or un tableau est de type Object (donc les propriétés et méthodes spécifiques aux objets Object ne sont pas listées) mais augmentées de propriétés et méthodes spécifiques aux tableaux, ce sont celles-ci que tu retrouves dans la boucle.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/10/2011, 16h53   #13
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 35
Points : 10
Points : 10
Par défaut Solution :)

Merci pour votre aide à tous. Un petit résumé:

Solution :
Citation:
Envoyé par Bovino Voir le message
En tout cas, pour un tableau, il est préférable de faire une boucle for classique en récupérant le length du tableau qu'une boucle for in.
Réponse à la question : mais pourquoi la fonction for me retourne les "__proto__" de cet élément alors qu'il ne le fait pas avec d'autres méthodes ?
Citation:
Envoyé par Bovino Voir le message
for in va faire une boucle sur toutes les propriétés et méthodes d'un objet.
Or un tableau est de type Object (donc les propriétés et méthodes spécifiques aux objets Object ne sont pas listées) mais augmentées de propriétés et méthodes spécifiques aux tableaux, ce sont celles-ci que tu retrouves dans la boucle.
rebel29270 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h34.


 
 
 
 
Partenaires

Hébergement Web