Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

[javascript] Libérer une case de tableau ?

kij_82, le vendredi 15 décembre 2006 à 10:55:14 
 Signaler ce message aux modérateurs

Bonjour,

Je voudrais savoir comment libérer une case d'un tableau en javascript, quelqun saurait-il faire ca ?

Par exemple, le tableau suivant :
<code>
var tab = new Array;
tab["popo"] = 1;
tab["tutu"] = 56;
...
/code>

Comment libérer la case "tutu" par exemple afin que la taille du tableau soit décrémentée automatiquement ?

Merci :)
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~

Configuration: Windows XP
Firefox 1.5.0.8

1

slum-dunk, le vendredi 15 décembre 2006 à 11:02:08

Tu peux utiliser l'algorithme qui consiste à décaler à gauche les éléments du tableau et à la fin du décalage tu donne à la valeur N(taille du tableau)=N-1;

Répondre à slum-dunk

2

kij_82, le vendredi 15 décembre 2006 à 11:04:31

Mum, oui, mais si je pouvais avoir une autre altenative que ca ca m'arrangerais ^^

PS : je précise que la méthode splice de l'objet Array ne fonctionne pas car elle se contente de remplacer la valeur de la case à supprimer par null. Donc la case est toujours là, la taille ne décrémente pas et une case ne référence plus rien, ce qui pose des problemes lors du parcours du tableau.
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~

Répondre à kij_82

4

slum-dunk, le vendredi 15 décembre 2006 à 11:07:42

Keski te géne c'est l'implementation de l'algo ou j'ai pas été claire sur l'explication?

Répondre à slum-dunk

3

kij_82, le vendredi 15 décembre 2006 à 11:06:42

Haaa !!

J'ai trouvé mon bonheur : l'opérateur 'delete' de javascript permet cela

voir la page suivante pour les intéressés :
http://developer.mozilla.org/...

Merci :) ~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~

Répondre à kij_82

5

slum-dunk, le vendredi 15 décembre 2006 à 11:25:21

C'est cool la soluce,mais tester l'algo de décalage te ferai un peu d'exercice...si tu as un pe temps.

Répondre à slum-dunk

6

kij_82, le vendredi 15 décembre 2006 à 11:31:33

Bon, il s'avère que l'option delete n'est pas si bien que ca en fait, donc j'ai finalement opté pour une fonction maison reprenant effectiviment l'idée de décalage, voici donc le code :

function freeBox ( lib ){
		
		var tmpArray = new Array();
		
		// --- Rebuild the array
		for ( var i = 0; i < this.box_list.lenght; i++ )
			if ( this.box_list[i].lib != lib )
				tmpArray[tmpArray.lenght] = this.box_list[i];
		
		// --- And set it to the boxlist of map
		this.box_list = tmpArray;
}


Mon tableau est une liste d'objet, d'ou l'acces à la propriété 'lib'.

Merci pour cette idée slum.

~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~

Répondre à kij_82

7

slum-dunk, le vendredi 15 décembre 2006 à 12:15:22
  • +2

Voila l' algo.,tu tester à la main pour voir comment ça fonctionne

procédure dcg(données:tab(n):tableau d'objet,n:entier,k:entier)
//n est la taille du tableau
//k c'est la position de l'objet à supprimer dans ton tableau
var i:entier
début

pour i de k à n faire
{
tab(i)=tab(i+1);
}
n=n-1;

fin dcg

//dcg :décalage cyclique à gauche

Répondre à slum-dunk

8

slum-dunk, le vendredi 15 décembre 2006 à 17:26:47

Bonsoir Kij_82,tu en est ou??

Répondre à slum-dunk

9

Bludwarf, le dimanche 6 avril 2008 à 11:00:25

Salut kij_82 je crois que tu pourrais améliorer ton algo en terme de vitesse.

Sur ton prog tu recrée entièrement ton tableau, alors qu'il suffit juste de faire remonter les élements suivant la case à supprimer. A la fin de ton tableau il te restera une case en trop : tu peux la supprimer en faisant : tonTablo.pop();

Et voilà j'espère t'avoir rendu service (même si le sujet en bien vieux!).

Répondre à Bludwarf

10

kij_82, le lundi 7 avril 2008 à 10:51:10

Bonjour,

Effectivement le sujet est bien vieux et j'ai du oublié de le mettre à jour :s
A l'époque j'ai effectivement refais le programme pour ne pas recréer à chaque fois.

Merci en tout cas de ton aide :)

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

11

ddez, le mercredi 6 août 2008 à 18:35:18

Bonjour à tous,

Je viens de me prendre la tête un bon moment sur ce problème aussi et je viens de me rendre compte d'un truc :

Lorsque l'on code ceci :

 var tab = new Array();
 tab["popo"] = 1;
 tab["tutu"] = 56;
 tab["tata"] = 57;
 tab["titi"] = 58;
En réalité, on ajoute aucun élément dans la liste car
 alert(tab.length); //affiche 0
En réalité, on ajoute des paramètres à cette liste. On peut d'ailleurs récupérer ces valeurs de la manière suivante :
 alert(tab.tutu); //affiche 56
Et ces paramètres sont effaçable par la commande "delete"
 delete(tab["tutu"]);

 for(var i in tab){
    document.write('tab["'+i+'"] = '+tab[i]+';<br>');
 }
 //affiche
 //tab["popo"] = 1;
 //tab["tata"] = 57;
 //tab["titi"] = 58;
En revenche, si on utilise les listes "normalement" (sans utiliser d'indices textuels), on peut utiliser la fonction suivante :
 remove=function(){
   var _temp=arguments[0].splice(0,arguments[1]);
   arguments[0].shift();
   arguments[0].unshift(_temp);
 };

 var tab=new Array(1,56,57,58);

 alert(tab); //affiche 1,56,57,58
 remove(tab,1);
 alert(tab); //affiche 1,57,58
Alors qu'un delete ne supprime pas réellement l'élément :
 var tab=new Array(1,56,57,58);

 alert(tab); //affiche 1,56,57,58
 delete(tab[1]);
 alert(tab); //affiche 1,,57,58

Voila voila.
J'espère que ca en aidera quelques uns.

Bon code ...

Répondre à ddez

12

ddez, le mercredi 6 août 2008 à 19:44:34

Ha oui, juste un détail pour la fonction remove (ca marchait pas avec l'indice 0) :

 remove=function(){
   if(arguments[1]>0){
     var _temp=arguments[0].splice(0,arguments[1]);
     arguments[0].shift();
     arguments[0].unshift(_temp);
   }
   else{
     arguments[0].shift();
   }
 };

Répondre à ddez

13

 ddez, le jeudi 7 août 2008 à 00:20:21
  • +1

Désolé mais encore une correction car le résultat n'était pas exactement celui attendu (malgré l'affichage du alert).
Maintenant c'est bon, c'est sur :

 remove=function(){
   if(arguments[1]>0){
     var _temp=arguments[0].splice(0,arguments[1]);
     arguments[0].shift();
     while(_temp.length>0){
        arguments[0].unshift(_temp.pop());
     }
   }
   else{
     arguments[0].shift();
   }
 };

Encore désolé pour ces posts avec de mauvais codes...

Répondre à ddez
Javascript - l'objet Array Les particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si... www.commentcamarche.net/contents/javascript/jsarray.php3
Tableau PHP en parametre fonction Javascript (Résolu) Bonjour, jeune webmaster d'un site ecrit en Php/MySql, je souhaite agrémenter le site d'un menu en javascript que je ve renseigner via une requete sur la base MySql. Seule problème le passage des deux variables ( tableau de chaine pour les deux ) dans... www.commentcamarche.net/forum/affich-2784685-tableau-php-en-parametre-fonction-javascript
Javascript - Les tableaux Introduction à la notion de tableau Les variables de Javascript ne permettent de stocker qu'une seule donnée à la fois. Or, étant donné qu'il est souvent utile de manipuler de nombreuses données, le concept de variable se révéle parfois... www.commentcamarche.net/contents/javascript/jstab.php3
Switch case javascriptQuelle est la syntaxe exacte pour affecter plusieurs valeurs dans un case ? J'en ai essayé plusieurs en vain avec , | www.commentcamarche.net/forum/affich-42943-switch-case-javascript
Javascript: tester les cases a cocherBonjour, voila j 'ai un forumulaire comportant un nombre variable de lignes avec des cases a cocher (variable car resultat d'une requete SQL sur BD) J aimerais donc tester si au moins une de toutes les case a cocher a été coché (c pour éviter que le... www.commentcamarche.net/forum/affich-370076-javascript-tester-les-cases-a-cocher
Tri dynamique d'un tableau en php/javascriptBonjour, j'affiche un tableau HTML à deux dimensions, et je voudrais pouvoir, en cliquant sur l'en-tête d'une colonne, retrier automatiquement le tableau selon cette colonne, mais sans recharger la page (j'ai des zones de saisie sur la page, donc je... www.commentcamarche.net/forum/affich-1437694-tri-dynamique-d-un-tableau-en-php-javascript
Javascript - Les variablesLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,... www.commentcamarche.net/contents/javascript/jsvar.php3