[JS] Array: Ajout et retrait dynamiques de "lignes"
2 participants
Forum gratuit : Le forum des forums actifs :: Entraide & Support... :: Problème avec un script, un code :: Archives des problèmes avec un code
Page 1 sur 1 • Partagez
[JS] Array: Ajout et retrait dynamiques de "lignes"
Bonjour à tous !
Alors je suis encore assez novice dans la manipulation de tableaux javascript, donc mes connaissances sont très très basiques !
Dans mon Panneau d'Accueil j'ai différents éléments, dont 5 que je voudrais faire "clignoter" aléatoirement pour les mettre en évidence et montrer aux utilisateurs que leur survol peut être intéressant.
J'ai déclaré un tableau js comme ceci :
Et un petit bout de js me permet de tirer aléatoirement une de ces valeurs :
J'obtiens l'effet que je veux dans le sens où effectivement il va bien me tirer au hasard une des valeurs du tableau et faire ce que je veux avec l'élément choisi aléatoirement, puis tirer une autre valeur et ainsi de suite.
Le truc c'est que je ne veux pas que le même élément soit tiré deux fois de suite, mais qu'il peut être tiré à nouveau après le prochain élément sélectionné aléatoirement, car chaque élément doit "clignoter" un certain nombre de fois.
Alors je me suis dit : et si je retirais la ligne qui vient d'être tirée pour qu'elle ne soit pas choisie au prochain tirage, mais la rajoutais une fois le tirage effectué pour qu'elle puisse à nouveau être prise en compte lors du tirage suivant ?
Sauf que je ne sais pas comment faire ça :S
J'ai lu qu'il y avait quelque chose comme :
Merci d'avance pour votre aide et joyeuse fin de Pâques !
Alors je suis encore assez novice dans la manipulation de tableaux javascript, donc mes connaissances sont très très basiques !
Dans mon Panneau d'Accueil j'ai différents éléments, dont 5 que je voudrais faire "clignoter" aléatoirement pour les mettre en évidence et montrer aux utilisateurs que leur survol peut être intéressant.
J'ai déclaré un tableau js comme ceci :
- Code:
var tab_hasard = new Array();
tab_hasard[0] = 'nouvelles';
tab_hasard[1] = 'evil';
tab_hasard[2] = 'light';
tab_hasard[3] = 'staff';
tab_hasard[4] = 'contexte';
var l_tab_hasard = tab_hasard.length;
Et un petit bout de js me permet de tirer aléatoirement une de ces valeurs :
- Code:
hasard = tab_hasard[Math.round((Math.random()*l_tab_hasard) - .5)];
J'obtiens l'effet que je veux dans le sens où effectivement il va bien me tirer au hasard une des valeurs du tableau et faire ce que je veux avec l'élément choisi aléatoirement, puis tirer une autre valeur et ainsi de suite.
Le truc c'est que je ne veux pas que le même élément soit tiré deux fois de suite, mais qu'il peut être tiré à nouveau après le prochain élément sélectionné aléatoirement, car chaque élément doit "clignoter" un certain nombre de fois.
Alors je me suis dit : et si je retirais la ligne qui vient d'être tirée pour qu'elle ne soit pas choisie au prochain tirage, mais la rajoutais une fois le tirage effectué pour qu'elle puisse à nouveau être prise en compte lors du tirage suivant ?
Sauf que je ne sais pas comment faire ça :S
J'ai lu qu'il y avait quelque chose comme :
- Code:
array.splice(array.indexOf('machin'),1)
Merci d'avance pour votre aide et joyeuse fin de Pâques !
Dernière édition par Evaliah le Sam 11 Avr 2015 - 12:02, édité 1 fois
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Bonjour, je ne sais pas comment est le reste de votre script mais je vous propose la solution suivante:
ensuite il vous suffit d'appeler gen_hasard() pour récupérer un index aléatoire par exemple:
Notez que vous ne devriez pas utiliser la variable hasard_tmp, dans la mesure ou celle-ci est utilisée pour mémoriser la valeur aléatoire renvoyée par la fonction gen_hasard().
- Code:
var hasard_tmp;
var tab_hasard = 'nouvelles,evil,light,staff,contexte'.split(',');
function gen_hasard(){
do{var t=Math.floor(Math.random()*tab_hasard.length)}while(hasard_tmp==t);
return (hasard_tmp=t);
}
ensuite il vous suffit d'appeler gen_hasard() pour récupérer un index aléatoire par exemple:
- Code:
tab_hasard[gen_hasard()]
Notez que vous ne devriez pas utiliser la variable hasard_tmp, dans la mesure ou celle-ci est utilisée pour mémoriser la valeur aléatoire renvoyée par la fonction gen_hasard().
Dernière édition par no_way le Mar 7 Avr 2015 - 7:22, édité 2 fois (Raison : faute d'orthographe)
no_way- Membre actif
- Messages : 2214
Inscrit(e) le : 26/03/2010
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Bonsoir no_way et merci pour votre réponse
Cette méthode différente semble intéressante, mais à vrai dire j'ai du mal à la comprendre, donc j'aimerais savoir si vous pourriez me l'expliquer un peu avant de la tester, j'aime bien savoir ce que je fais =)
Je n'ai jamais utilisé de do / while mais d'après la documentation que j'ai consultée votre code ci-dessous :
Merci pour cette nouvelle pierre (do/while) à mon début d'édifice en tout cas
Cette méthode différente semble intéressante, mais à vrai dire j'ai du mal à la comprendre, donc j'aimerais savoir si vous pourriez me l'expliquer un peu avant de la tester, j'aime bien savoir ce que je fais =)
Je n'ai jamais utilisé de do / while mais d'après la documentation que j'ai consultée votre code ci-dessous :
- Code:
do{var t=Math.floor(Math.random()*tab_hasard.length)}while(hasard_tmp==t);
Merci pour cette nouvelle pierre (do/while) à mon début d'édifice en tout cas
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Aucun problème:
Petit complément d'information concernant la déclaration de votre tableau:
- Code:
var tab_hasard = 'nouvelles,evil,light,staff,contexte'.split(',');
- Code:
do{var t=Math.floor(Math.random()*tab_hasard.length)}while(hasard_tmp==t);
- Code:
...
var t=Math.floor(Math.random()*tab_hasard.length);
while(hasard_tmp==t){
/*répétition du calcul, un peu dommage*/
t=Math.floor(Math.random()*tab_hasard.length);
}
...
- Code:
return (hasard_tmp=t);
Petit complément d'information concernant la déclaration de votre tableau:
- Code:
var tab_hasard = new Array();
tab_hasard[0] = 'nouvelles';
tab_hasard[1] = 'evil';
tab_hasard[2] = 'light';
tab_hasard[3] = 'staff';
tab_hasard[4] = 'contexte';
- Code:
var tab_hasard = ['nouvelles','evil','light','staff','contexte'];
no_way- Membre actif
- Messages : 2214
Inscrit(e) le : 26/03/2010
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Merci encore une fois pour cette réponse et pour l'optimisation dans la déclaration du tableau
Votre solution semble fonctionner (je n'avais pas de doute sur la solution en elle-même mais sur ma capacité à l'appliquer au reste de mon js) mais j'ai un problème auquel je ne m'attendais pas sur la suppression d'une valeur dans le tableau.
En effet je voudrais que lorsqu'on a survolé un des éléments programmés pour "clignoter" celui-ci ne soit plus pris en compte dans la fonction déclenchant le "clignotement", l'utilisateur a bien repéré qu'il pouvait faire quelque chose avec donc ce n'est plus utile de le lui signaler.
J'ai pensé qu'en utilisant ceci (lors du survol de l'élément correspondant) par exemple :
Et effectivement lors du premier survol on retire bien le "nouvelles" du tableau, mais si on survole ce même élément une seconde fois même si l'élément n'existe plus il va retirer le dernier élément du tableau, donc pour moi "contexte".
Je suppose que c'est parce-que le "tab_hasard.indexOf('nouvelles')" retourne alors une valeur qui indique de retirer le dernier élément du tableau, mais je ne sais pas comment faire pour corriger ce problème.
Auriez-vous une solution pour cette défaillance ?
Merci beaucoup
ps : J'entrevois bien une solution mais elle ne me semble pas optimale :
Grossièrement :
Votre solution semble fonctionner (je n'avais pas de doute sur la solution en elle-même mais sur ma capacité à l'appliquer au reste de mon js) mais j'ai un problème auquel je ne m'attendais pas sur la suppression d'une valeur dans le tableau.
En effet je voudrais que lorsqu'on a survolé un des éléments programmés pour "clignoter" celui-ci ne soit plus pris en compte dans la fonction déclenchant le "clignotement", l'utilisateur a bien repéré qu'il pouvait faire quelque chose avec donc ce n'est plus utile de le lui signaler.
J'ai pensé qu'en utilisant ceci (lors du survol de l'élément correspondant) par exemple :
- Code:
tab_hasard.splice(tab_hasard.indexOf('nouvelles'),1);
Et effectivement lors du premier survol on retire bien le "nouvelles" du tableau, mais si on survole ce même élément une seconde fois même si l'élément n'existe plus il va retirer le dernier élément du tableau, donc pour moi "contexte".
Je suppose que c'est parce-que le "tab_hasard.indexOf('nouvelles')" retourne alors une valeur qui indique de retirer le dernier élément du tableau, mais je ne sais pas comment faire pour corriger ce problème.
Auriez-vous une solution pour cette défaillance ?
Merci beaucoup
ps : J'entrevois bien une solution mais elle ne me semble pas optimale :
Grossièrement :
- Code:
// En dehors de la fonction de survol
var retrait_nouvelles = 1;
// Dans la fonction de survol
if(retrait_nouvelles){
tab_hasard.splice(tab_hasard.indexOf('nouvelles'),1);
retrait_nouvelles = 0;
}
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Il est assez difficile de vous faire un code optimal ignorant le reste du script mais voici ce que je vous propose:
- Code:
function retrait_tab(e){
var a=tab_hasard.indexOf(e);
a!=-1&&tab_hasard.splice(a,1);
}
no_way- Membre actif
- Messages : 2214
Inscrit(e) le : 26/03/2010
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Merci encore une fois pour cette aide !
Par contre je ne possède pas toutes les clefs pour le comprendre et mes recherches au sujet des "bouts de connaissance manquants" n'ont pas été très fructueuses.
je comprends que le var a va chercher l'index de l'élément voulu (par exemple le "nouvelles"), mais ensuite plusieurs choses sortent de ma zone de compréhension.
a != : Je sais que le != veut souvent dire n'est pas égal à, mais dire qu'une variable n'est pas égale à sans mettre de "if" n'entre pas dans ce que j'ai déjà pu voir/utiliser, du coup je ne comprends pas quel est l'effet recherché.
-1&& : là j'avoue que c'est le flou total, et je ne sais pas quels mots clefs utiliser pour en chercher la signification
Pour le retrait jusqu'à ce qu'il n'en reste plus qu'un (Highlander quoi !) ce n'est pas un problème, ma fonction prend bien en compte le nombre d'éléments du tableau et s'arrête d'elle-même quand il ne reste plus de fil sur la bobine
Merci pour votre patience en tout cas !
Par contre je ne possède pas toutes les clefs pour le comprendre et mes recherches au sujet des "bouts de connaissance manquants" n'ont pas été très fructueuses.
je comprends que le var a va chercher l'index de l'élément voulu (par exemple le "nouvelles"), mais ensuite plusieurs choses sortent de ma zone de compréhension.
a != : Je sais que le != veut souvent dire n'est pas égal à, mais dire qu'une variable n'est pas égale à sans mettre de "if" n'entre pas dans ce que j'ai déjà pu voir/utiliser, du coup je ne comprends pas quel est l'effet recherché.
-1&& : là j'avoue que c'est le flou total, et je ne sais pas quels mots clefs utiliser pour en chercher la signification
Pour le retrait jusqu'à ce qu'il n'en reste plus qu'un (Highlander quoi !) ce n'est pas un problème, ma fonction prend bien en compte le nombre d'éléments du tableau et s'arrête d'elle-même quand il ne reste plus de fil sur la bobine
Merci pour votre patience en tout cas !
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Aucun souci j'aime ce genre d'aide ^^, et j'aurais dû avoir la présence d'esprit d'expliquer, ce que je m'en vais faire de ce pas
Mais si "a" n'est plus entre 4 et 10:
C'est le principe du court-circuit:
si "a" est différent de -1 (test juste donc), on passe à l'étape suivante qui consiste à supprimer l'élément du tableau ("tab_hasard.splice(a,1)"), dans le cas contraire le court-circuit est simplement évalué à false et donc la deuxième étape ("tab_hasard.splice(a,1)") est ignorée.
C'est l'équivalent if suivant:
En revanche ça devient vite illisible et il y a des limites que je ne détaillerai pas car vous devriez avoir suffisamment d'informations pour d'éventuelles recherches de documentation.
Si vous ne comprenez pas tout, contactez-moi par MP afin de ne pas trop être hors-sujet par rapport à votre question initiale .
- Code:
a!=-1&&tab_hasard.splice(a,1);
- Code:
var a=5;
if(a>4&&a<10){...}
Mais si "a" n'est plus entre 4 et 10:
- Code:
var a=3;
if(a>4&&a<10){...}
C'est le principe du court-circuit:
- Code:
a!=-1&&tab_hasard.splice(a,1);
si "a" est différent de -1 (test juste donc), on passe à l'étape suivante qui consiste à supprimer l'élément du tableau ("tab_hasard.splice(a,1)"), dans le cas contraire le court-circuit est simplement évalué à false et donc la deuxième étape ("tab_hasard.splice(a,1)") est ignorée.
C'est l'équivalent if suivant:
- Code:
if(a!=-1){tab_hasard.splice(a,1);}
- Code:
condition?valeur si vrai:valeur si faux;
- Code:
var a=5;
alert(a==5?"a est égal à 5":"a n'est pas égal à 5");
- Code:
var a="Evaliah";
a+=a=="Evaliah"?" est une fille":" est un garçon";
alert(a);
- Code:
var a="Evaliah";
if(a=="Evaliah"){
a+=" est une fille";
}else{
a+=" est un garçon";
}
alert(a);
En revanche ça devient vite illisible et il y a des limites que je ne détaillerai pas car vous devriez avoir suffisamment d'informations pour d'éventuelles recherches de documentation.
Si vous ne comprenez pas tout, contactez-moi par MP afin de ne pas trop être hors-sujet par rapport à votre question initiale .
no_way- Membre actif
- Messages : 2214
Inscrit(e) le : 26/03/2010
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Merci pour toutes ces explications !
C'était donc un "if" raccourci, ce que j'avais pressenti sans pour autant en être sûre
Je ne savais pas du tout qu'on pouvait se servir du && autrement que pour évaluer deux conditions dans le if comme dans votre premier code avec le a = 5, et pour le petit bonus : "condition?valeur si vrai:valeur si faux;" je l'avais déjà vu dans les explications sur des formulaires mais je me suis rarement aventurée à l'utiliser, pourtant c'est bien pratique !
Il y a une dernière chose qui m'interpelle, c'est justement cette condition "si a n'est pas égal à -1", je pense comprendre mais je voudrais juste confirmation : )
Donc si on définit a comme ceci :
Dès que "nouvelles" n'est plus présent, a renvoie forcément comme valeur -1.
Donc si j'ai bien compris, quand je tentais ceci :
Voilà, si j'ai bien compris comme indiqué je n'ai normalement plus de question votre honneur
C'était donc un "if" raccourci, ce que j'avais pressenti sans pour autant en être sûre
Je ne savais pas du tout qu'on pouvait se servir du && autrement que pour évaluer deux conditions dans le if comme dans votre premier code avec le a = 5, et pour le petit bonus : "condition?valeur si vrai:valeur si faux;" je l'avais déjà vu dans les explications sur des formulaires mais je me suis rarement aventurée à l'utiliser, pourtant c'est bien pratique !
Il y a une dernière chose qui m'interpelle, c'est justement cette condition "si a n'est pas égal à -1", je pense comprendre mais je voudrais juste confirmation : )
Donc si on définit a comme ceci :
- Code:
var a=tab_hasard.indexOf(e);
Dès que "nouvelles" n'est plus présent, a renvoie forcément comme valeur -1.
Donc si j'ai bien compris, quand je tentais ceci :
- Code:
tab_hasard.splice(tab_hasard.indexOf('nouvelles'),1);
- Code:
tab_hasard.splice(-1,1);
Voilà, si j'ai bien compris comme indiqué je n'ai normalement plus de question votre honneur
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Vous avez parfaitement cerné les subtilités votre radiance ^^.
Et merci de votre merci
Et merci de votre merci
no_way- Membre actif
- Messages : 2214
Inscrit(e) le : 26/03/2010
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Dans ce cas c'est une affaire résolue !
Merci encore une fois pour votre patience et votre pédagogie, j'ai appris des choses très intéressantes grâce à ce sujet
Merci encore une fois pour votre patience et votre pédagogie, j'ai appris des choses très intéressantes grâce à ce sujet
Re: [JS] Array: Ajout et retrait dynamiques de "lignes"
Je vous en prie et bonne continuation pour votre forum !
no_way- Membre actif
- Messages : 2214
Inscrit(e) le : 26/03/2010
Sujets similaires
» (1069) RPG : Supprimer des lignes d'un champ tableau transforme les lignes restantes en colonnes
» Parchemins Dynamiques
» Bandeau avec liens dynamiques
» Retirer tous les petits boutons dans la liste des sujets
» retrait d'une fonction
» Parchemins Dynamiques
» Bandeau avec liens dynamiques
» Retirer tous les petits boutons dans la liste des sujets
» retrait d'une fonction
Forum gratuit : Le forum des forums actifs :: Entraide & Support... :: Problème avec un script, un code :: Archives des problèmes avec un code
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum