IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
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

JavaScript Discussion :

Conna�tre l'index d'une valeur dans un tableau


Sujet :

JavaScript

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    82
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 82
    Par d�faut Conna�tre l'index d'une valeur dans un tableau
    Bonjour,

    J'aimerais pouvoir stocker dans une variable l'index d'une valeur d'un tableau.

    Exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var tab = ["a", "b", "c", "d"];
    Si le tableau contient, par exemple, une liste d'images, je sais que je pourrais faire :

    this.src;
    �a va me retourner l'src de l'image sur laquelle je clique. Si j'aurais fais "this.id" �a m'aurait retourner l'id de l'image. Mais si je veux qu'on me retourne la position de cette image dans le tableau (si elle est dans l'index 0, 1, ou 2...), comment faire ? Est ce qu'il existe un "this.index" ?

    Comment faire pour stocker dans une variable la position de l'�l�ment du tableau sur lequel on vient de cliquer ?

    Merci.

  2. #2
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    Cela suppose l'unicit� de tes �l�ments d'array... ou alors ton arrayIndex devra retourner un tableau

    Mais on peut imaginer un prototype du genre:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Array.prototype.arrayIndex=function(valeur){
    var i=-1;
    var indexes = new Array();
    while (this[++i]){
    	if (this[i]===valeur){
    		indexes.push(i);}
     }
    return (indexes.length>0)? indexes:-1;
    }		
     
    var tab = ["a", "b", "c", "d","b"];
     
    alert(tab.arrayIndex('b'))
    retourne un tableau des indexes correspondants � la valeur recherch�e, ou -1 si pas d'occurrences
    Ma page Developpez - Mon Blog 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

    Venez sur le Chat de D�veloppez !

  3. #3
    R�dacteur

    Avatar de Bovino
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    A noter qu'il existe aussi la m�thode indexOf() pour les array, mais elle n'est pas compatible IE
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, 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
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  4. #4
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Citation Envoy� par Bovino Voir le message
    A noter qu'il existe aussi la m�thode indexOf() pour les array, mais elle n'est pas compatible IE
    ...auquel cas on peut �galement la red�finir en s'inspirant par exemple de Prototype ^^
    (c'est ce que j'ai fait de mon c�t� suite je crois � un conseil de vermine )

    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // rustine tirée de Prototype (merci les gars ^_^') pour assurer Array.indexOf dans IE
    if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
      i || (i = 0);
      var length = this.length;
      if (i < 0) i = length + i;
      for (; i < length; i++)
        if (this[i] === item) return i;
      return -1;
    }

  5. #5
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    on peut �galement passer par les tableaux associatifs
    petit exemple pour illustrer
    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
    <html>
    <head>
    </head>
    <body>
      <img src="img/image1.jpg">
      <img src="img/image2.jpg">
      <img src="img/image3.jpg">
      <img src="img/image4.jpg">
    </body>
    <script type="text/javascript">
    // le tableau 
    var tImage = [];
    // la fonction de lecture
    function getIndex( tab, ref){
      return tab[ ref] ? tab[ ref] :-1;
    }
    // la recuperation et initialisation
    for( var i=0, nb =document.images.length; i < nb; i++){
      var oImg = document.images[i];
      // affectation
      tImage[oImg.src] = i+1;
      // fct sur click pour voir
      oImg.onclick = function(){
         alert( 'image n° ' +getIndex( tImage, this.src));
      }
    }
    </script>
    </html>
    � condition de l'avoir initialis� au paravent.

  6. #6
    Expert confirm�
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Ao�t 2003
    Messages
    3 684
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : danseur

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 3 684
    Par d�faut
    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
    <script type="text/javascript">
     
    var tab = ["un", "deux", "trois", "quatre","cinq"];
     
    function cherch(n){
    	for(i in tab){
    		if(tab[i]==n){
    			alert(n + "\n\na été trouvé à l'index " + i + " du tableau");break;
    		}
    	}
    }
     
    cherch("trois");
     
    </script>

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    82
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 82
    Par d�faut
    Citation Envoy� par SpaceFrog Voir le message
    Cela suppose l'unicit� de tes �l�ments d'array... ou alors ton arrayIndex devra retourner un tableau

    Mais on peut imaginer un prototype du genre:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Array.prototype.arrayIndex=function(valeur){
    var i=-1;
    var indexes = new Array();
    while (this[++i]){
    	if (this[i]===valeur){
    		indexes.push(i);}
     }
    return (indexes.length>0)? indexes:-1;
    }		
     
    var tab = ["a", "b", "c", "d","b"];
     
    alert(tab.arrayIndex('b'))
    retourne un tableau des indexes correspondants � la valeur recherch�e, ou -1 si pas d'occurrences
    Merci !

    Par contre, �a ne marche pas sur mon script...

    J'ai un tableau qui se nomme cibleImg et qui contient pleins d'images.

    Quand je fais this.src, je re�ois le chemin de l'image sur lequel j'ai cliqu�.

    Mais quand j'utilise ta fonction et fais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    alert(cibleImg.arrayIndex(this.src))
    Le script ne fonctionne plus.

  8. #8
    R�dacteur

    Avatar de Bovino
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    Peut �tre que cibleImg n'est pas vraiment un tableau.
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, 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
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  9. #9
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    � condition de l'avoir initialis� au paravent.
    pour se planquer derri�re ??
    ne pas confondre auparavant et un paravent

    array, objet collection ...
    on peut le voir ce myst�rieux objet ?
    Ma page Developpez - Mon Blog 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

    Venez sur le Chat de D�veloppez !

  10. #10
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Citation Envoy� par SpaceFrog
    pour se planquer derri�re ??
    ne pas confondre auparavant et un paravent
    on eut pu croire � de l'humour, mais il n'en est rien c'est bien une coquille...

    Concernant le sujet trait�, il y a encore la possibilit� d'utiliser l'attribut tabIndex, m�me si non valide W3C, celui ci �tant support� sur les IMG par les navigateurs.

    Le script que j'ai propos� devenant
    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
    // le tableau 
    var tImage = [];
    // la fonction de lecture
    function getIndex( tab, ref){
      return tab[ ref] ? tab[ ref] :-1;
    }
    // la recuperation et initialisation
    for( var i=0, nb =document.images.length; i < nb; i++){
      var oImg = document.images[i];
      var index = i+1;
      // affectation
      tImage[oImg.src] = index;
      // ajout tabindex
      oImg.setAttribute('tabIndex', index);
      // fct sur click pour voir
      oImg.onclick = function(){
         alert( 'image n° ' +getIndex( tImage, this.src) +'\ntabIndex : ' +this.getAttribute('tabIndex'));
      }
    }
    par exemple

  11. #11
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    82
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 82
    Par d�faut
    Merci !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 16/07/2014, 09h40
  2. R�cup�rer l'index d'une valeur dans un ndArray
    Par quedreuxa dans le forum G�n�ral Python
    R�ponses: 3
    Dernier message: 18/06/2010, 17h00
  3. R�ponses: 9
    Dernier message: 05/01/2007, 20h04
  4. Rechercher une valeur dans un tableau
    Par pafi76 dans le forum Access
    R�ponses: 2
    Dernier message: 29/06/2006, 14h23
  5. R�ponses: 21
    Dernier message: 28/02/2006, 15h23

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