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 20/07/2011, 10h56   #1
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2011
Messages : 13
Points : 0
Points : 0
Par défaut Balayer devant sa porte.

Bonjour !

Je voudrais écrire une fonction qui balaie une liste, et qui applique
une seconde fonction à chaque élément de la liste.

J'ai écris la fonction suivante :
Code :
1
2
3
4
5
6
7
 
Array.prototype.argubalayer=function(fonction)
{
var butee=this.length,liste=[]
for(var i=0; i<butee; i++) liste.push(fonction(this[i]))
return liste
}
Elle fonctionne très bien; par exemple :
Code :
1
2
3
 
liste_=[1,2,3,4]
liste_.argubalayer(alert) //produit ce que l'on attend.
Maintenant, je voudrais écrire la fonction thisbalayer, qui injecterait
this dans la fonction, comme cela :
Code :
liste.push(this[i].fonction())
Je ne trouve pas la bonne syntaxe : un tuyau ?
sacapuss2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 11h57   #2
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
tu peux t'en sortir avec apply :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var liste=[1,2,3]
Array.prototype.argubalayer=function(func)
{
 var butee=this.length,liste=[]
 for(var i=0; i<butee; i++){
 //le premier arg représente la référence this au sein de func, le second un tableau de paramètres
  func.apply(this[i], ['lol'+this[i]]);
 }
 return this;
}
liste.argubalayer(console.log);
//affiche
lol1
lol2
lol3
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/07/2011, 12h15   #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 797
Points : 35 797
@galerien69 : apply n'apporte rien de plus dans ce contexte...
Code :
1
2
3
4
5
6
7
8
9
10
var liste=[1,2,3]
Array.prototype.argubalayer=function(func)
{
 var butee=this.length,liste=[]
 for(var i=0; i<butee; i++){
  func('lol'+this[i]);
 }
 return this;
}
liste.argubalayer(console.log);
produit exactement le même résultat...

@sacapuss2 :
Citation:
Elle fonctionne très bien; par exemple :
Code :
1
2
liste_=[1,2,3,4]
liste_.argubalayer(alert) //produit ce que l'on attend.
en es-tu vraiment sûr ?
Parce que là, tu ne rempli ton tableau liste qu'avec des undefined puisque le push porte sur le résultat de l’exécution de la fonction...
Code :
liste.push(this[i].fonction())
là aussi, je ne suis pas certain que tu comprennes bien ce que tu essayes de faire
Avec cette syntaxe, tu essayes juste de remplir un tableau avec les résultats de l'exécution de la méthode "fonction" de l'objet "this[i]", sachant qu'il s'agit de nombres, ils n'ont pas de méthode alert...

Ceci dit, je ne comprends pas du tout ce que tu veux réellement obtenir au final.
__________________
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 00
Vieux 20/07/2011, 12h18   #4
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2011
Messages : 13
Points : 0
Points : 0
Par défaut Merci.

Merci, galerien69, de ta prompte réponse !

Je n'ai encore jamais utilisé cette syntaxe : le moment est peut-être venu de m'y mettre.
sacapuss2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 12h27   #5
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2011
Messages : 13
Points : 0
Points : 0
Par défaut Merci, Bovino !

Merci, Bovino, de contribuer !

"en es-tu vraiment sûr ?"
Merci de ta remarque. Dans le cas présent, je ne m'intéressait pas au return, mais aux alert !

"sachant qu'il s'agit de nombres, ils n'ont pas de méthode alert"
Effectivement, dans le deuxieme cas, alert est un mauvais exemple ;o)
sacapuss2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 12h38   #6
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
Citation:
apply n'apporte rien de plus dans ce contexte...
vivi.

Après la question, c'était d'avoir this au sein de la fonction qui réfère à un élément de la liste. D'où ma proposition.
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 12h41   #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 019
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 019
Points : 45 114
Points : 45 114
de memoire, dans ce contexte this est en lecture seule ... donc pas modifiable ...
__________________
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 20/07/2011, 12h46   #8
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
Est-il question de le modifier?

Sinon, on peut retourner la valeur de func
qqch du style
Code :
1
2
3
4
5
this[i] = func.apply(this[i], ['lol']);
...
function func(prefixLol){
 return prefixLol + this;
}
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 12h52   #9
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
Citation:
Envoyé par sacapuss2 Voir le message
Maintenant, je voudrais écrire la fonction thisbalayer, qui injecterait
this dans la fonction, comme cela :
Code :
liste.push(this[i].fonction())
Je ne trouve pas la bonne syntaxe : un tuyau ?
Si j'ai bien compris ce que tu veux faire, il n'y a pas de bonne syntaxe, et c'est inhérent à JavaScript : liste.push est une fonction comme les autres, et gère ses arguments de la même façon que les autres.
Code :
list.push( expression )
Quelle que soit l'expression que tu écris, elle n'a pas d'influence sur le comportement de push. (Je sais pas si je suis très clair.)

Sinon, ta méthode argubalayer me fait furieusement penser à la célèbre map, je pense que ça va t'intéresser : https://developer.mozilla.org/en/Jav...ects/Array/map. C'est un principe commun à beaucoup de langages (en fait, on peut imaginer un map dans tout langage qui comporte des listes ou des tableaux)…

__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 13h05   #10
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 019
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 019
Points : 45 114
Points : 45 114
oui ou array walk en php ...
il me semble avoir proposé un script js de array map ...
mais je ne le retrouve plus sur le forum
__________________
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 20/07/2011, 13h42   #11
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
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 572
Points : 4 074
Points : 4 074
Citation:
Envoyé par Watilin Voir le message
Sinon, ta méthode argubalayer me fait furieusement penser à la célèbre map, je pense que ça va t'intéresser : https://developer.mozilla.org/en/Jav...ects/Array/map. C'est un principe commun à beaucoup de langages (en fait, on peut imaginer un map dans tout langage qui comporte des listes ou des tableaux)…
Je ne connaissais pas map (merci du lien ) mais on pouvait aussi penser à Enumerable.each de Prototype qui me semble très proche...
En tout cas avec map on peut se passer de Prototype pour avoir le même effet. ^^
__________________

...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 00
Vieux 20/07/2011, 13h46   #12
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 019
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 019
Points : 45 114
Points : 45 114
$.each en jquery ...
__________________
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 20/07/2011, 13h58   #13
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
Yep ^^ Mais each est une forme plus générale que map : on peut lui demander d'avoir un effet sur les éléments du tableau parcouru, sans attendre de résultat.
On a une méthode .map() en jQuery, et également Enumerable.map (alias collect) chez Prototype.
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/07/2011, 14h01   #14
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 019
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 019
Points : 45 114
Points : 45 114
http://www.developpez.net/forums/d77...rray-fonction/
__________________
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 20/07/2011, 14h58   #15
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
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 572
Points : 4 074
Points : 4 074
Citation:
Date : 08/07/2009
toujours en avance !
__________________

...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 00
Vieux 20/07/2011, 15h04   #16
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 019
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 019
Points : 45 114
Points : 45 114
en même temps en 27 519 messages, j'ai couvert pas mal de sujets ...
__________________
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 21/07/2011, 10h53   #17
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 421
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 421
Points : 2 809
Points : 2 809
http://www.developpez.net/forums/d10...odes-tableaux/

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 16h03   #18
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2011
Messages : 13
Points : 0
Points : 0
Par défaut Merci de vos contributions.

Chers collègues,

merci de vos contributions.

J'ai l'impression que la fonction map correspond à mon attente. Merci, donc, plus particulièrement, à Watilin, de nous l'avoir révélée.

J'ai essayé de lire attentivement le document https://developer.mozilla.org/en/Jav...ects/Array/map. Je ne comprends comment on utilise le second argument. L'un de vous saurait-il m'éclairer ?

Pour les petits curieux, mon chantier est http://www.valeriefondela.doobee.fr/

Bien à vous.

sacapuss2
sacapuss2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 16h47   #19
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 797
Points : 35 797
Le second paramètre correspond à l'objet référencé comme this dans la fonction :
Code :
1
2
3
4
5
var a = [1,2,3], b = ['a','b','c'];
b.map(function(valeur, index){
    var resultat = index + ' : ' + valeur + '\nthis : ' + this[index];
    alert(resultat);
}, a);
__________________
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 00
Vieux 22/07/2011, 19h35   #20
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2011
Messages : 13
Points : 0
Points : 0
Par défaut Array.prototype.formvaluer=function(booleen)

Salut les copains !

Je ne prends pas le temps de réfléchir à la réponse de Bovino (merci, Bovino !), mais vous livre la fonction que j'ai arrêtée :

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
Array.prototype.formvaluer=function(booleen)
{
var form=this,butee=form.length
 
for(var i=0; i<butee; i++)
{
element=form[i]
 
if(booleen)
{
if(element.tagName.isin('INPUT','TEXTAREA')) element.name.cooker(element.value=element.value.trimer())
else element.getAttribute('name').cooker(element.getAttribute('value'))
}
 
else // vidage
{
if(element.tagName.isin('INPUT','TEXTAREA')) element.name.cooker(element.value=vide)
 
else // selecteur
{
element.setAttribute('value',vide)
element.getAttribute('name').cooker(vide)
} 
} 
} 
}
Si vous avez envie de faire des commentaires...

Merci, d'avance !
sacapuss2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web