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 06/03/2011, 15h58   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2003
Messages : 18
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 18
Points : 10
Points : 10
Par défaut vider un tableau (array) multidimensionnel

Bonjour ,

Quand j'ai un array à une dimension à vider je fais ça

Code :
1
2
3
4
5
6
 
var tab1=new Array();
tab1[0]='un';
tab1[1]=2;
 
tab1.length=0; /* vidage */
à ce que je sais le garbage collector vide la zone mémoire allouée par le tableau


Dans le cas d'un array multidimensionnel je me demande quelle est la meilleur façon de le vider

pour l'exemple ce tableau multidimensionnel ,dans la réalité j'ai un tableau à plusieurs dimensions généré dynamiquement

Code :
1
2
3
4
5
6
7
8
9
10
 
var tab1=new Array();
tab1[0]='un';
tab1[1]=2;
tab1[2]=new Array('one','two','three','four','etc...');
tab1[3]=5;
tab1[4]=1;
tab1[5]=8;
tab1[6]=new Array('uno','dos','tres','cuatro');
tab1[7]='etc...';
Est ce qu'il suffit de faire tab1.length=0; /* ce qui semble ne poser aucun problème */

ou est t-il préférable de faire

tab1[2].length=0;
tab1[6].length=0;
tab1.length=0;

Merci pour vos réponses
Edgar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2011, 17h22   #2
Candidat au titre de Membre du Club
 
Inscription : juin 2003
Messages : 18
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 18
Points : 10
Points : 10
à mon avis tab1.length=0; est amplement suffisant ,je vais faire comme ça
Edgar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2011, 19h17   #3
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 853
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 853
Points : 1 352
Points : 1 352
Citation:
Envoyé par Edgar Voir le message
à mon avis tab1.length=0; est amplement suffisant ,je vais faire comme ça
je pense aussi.

sans être un expert du js. pour moi à partir du moment où " tab1.length=0;" supprime les référence du tableau vers ses objets. si les objets cessent d'exister (ne sont pas sont référencés ailleurs, dans d'autres variables par exemple) le gestionnaire de mémoire de ton moteur js de ton navigateur est censé supprimer les objects qui ne sont plus référencés.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 10h28   #4
Candidat au titre de Membre du Club
 
Inscription : juin 2003
Messages : 18
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 18
Points : 10
Points : 10
Citation:
Envoyé par Willpower Voir le message
à partir du moment où " tab1.length=0;" supprime les référence du tableau vers ses objets. si les objets cessent d'exister (ne sont pas sont référencés ailleurs, dans d'autres variables par exemple) le gestionnaire de mémoire de ton moteur js de ton navigateur est censé supprimer les objects qui ne sont plus référencés.
c'est le raisonnement que je me faisais aussi

Merci
Edgar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 11h08   #5
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
j'aurais tendance à faire
ce qui réinitialise l'objet, forcément;
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 18h16   #6
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 932
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 932
Points : 4 752
Points : 4 752
comme on ne sait pas trop, enfin au moins moi, comment sont gérés ces libérations une méthode "clean" pourrait être
Code :
1
2
3
4
5
Array.prototype.erase = function(){
  while( this.length){
    this.pop();
  }
}
Attention :
ne fonctionne pas avec les tableaux associatifs
NoSmoking est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 19h50   #7
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 853
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 853
Points : 1 352
Points : 1 352
Citation:
Envoyé par NoSmoking Voir le message
comme on ne sait pas trop, enfin au moins moi, comment sont gérés ces libérations une méthode "clean" pourrait être
Code :
1
2
3
4
5
Array.prototype.erase = function(){
  while( this.length){
    this.pop();
  }
}
Attention :
ne fonctionne pas avec les tableaux associatifs
perso, j'aurai tendance à vouloir croire que le BA-ba du moteur javascript est intelligemment conçu et que par contre une boucle while risquerait de ralentir mon exécution.

nb: mon avis n'est qu'intuitif, il est tout à fait possible que je me trompe.

autrement pour compléter ton code je dirai même :

Code :
1
2
3
4
5
6
7
Array.prototype.erase = function(deep){
  while( this.length){
    var e = this.pop();
    if(deep && (e instanceof Array))
      e.erase(true);
  }
}
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 09h42   #8
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
non non, je vous assure, réaffecter une variable provoque un coup de balai automatique de la valeur précédente;
pas de prise de tête là-dessus!
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h38.


 
 
 
 
Partenaires

Hébergement Web