Vider un tableau

Le
Caius Pupus
Bonjour,

Quelle est la meilleure solution pour vider simplement un tableau ?
Pour un tableau nommé "mon_tab", je pourrais faire une des solutions
suivantes :
- mon_tab = new Array(); // Je le recrée donc je le vide
- mon_tab.length = 0; // Autre solution que j'ai vue sur le web

Laquelle de ces solutions est la plus recommandée (moins gourmande en
mémoire, rapidité, etc.) ? Y a-t-il d'autres solutions encore plus fiables ?

Merci à vous ;-)

CP
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Laurent vilday
Le #21693411
Caius Pupus:

Quelle est la meilleure solution pour vider simplement un tableau ?
Pour un tableau nommé "mon_tab", je pourrais faire une des solutions
suivantes :
- mon_tab = new Array(); // Je le recrée donc je le vide
- mon_tab.length = 0; // Autre solution que j'ai vue sur le web

Laquelle de ces solutions est la plus recommandée (moins gourmande en
mémoire, rapidité, etc.) ?



Aucune idée, mais de toute façon ne t'occupe pas de l'optimisation et
encore moins de la micro optimisation tant que ton code n'est pas rodé
et fonctionnel.

Y a-t-il d'autres solutions encore plus
fiables ?



Plus ou moins fiable, aucune idée de ce que tu entends vraiment derrière
"fiable".

Je fais ceci quand je veux reinit un tableau :

mon_tab = [];

A toi de choisir ce que tu préfères. En javascript il y a toujours
(presque) plusieurs moyens d'arriver au même résultat. Tout n'est qu'une
question de style de code, feeling, expérience, etc.

Ne cherche pas a obtenir le "meilleur" code du premier coup, commence
par faire en sorte que ça fonctionne correctement.

--
laurent
Caius Pupus
Le #21696791
Le 06/05/2010 15:24, la nouvelle vedette du web, Laurent vilday, a écrit :
Caius Pupus:

Quelle est la meilleure solution pour vider simplement un tableau ?
Pour un tableau nommé "mon_tab", je pourrais faire une des solutions
suivantes :
- mon_tab = new Array(); // Je le recrée donc je le vide
- mon_tab.length = 0; // Autre solution que j'ai vue sur le web

Laquelle de ces solutions est la plus recommandée (moins gourmande en
mémoire, rapidité, etc.) ?



Aucune idée, mais de toute façon ne t'occupe pas de l'optimisation et
encore moins de la micro optimisation tant que ton code n'est pas rodé
et fonctionnel.

Y a-t-il d'autres solutions encore plus
fiables ?



Plus ou moins fiable, aucune idée de ce que tu entends vraiment derrière
"fiable".

Je fais ceci quand je veux reinit un tableau :

mon_tab = [];

A toi de choisir ce que tu préfères. En javascript il y a toujours
(presque) plusieurs moyens d'arriver au même résultat. Tout n'est qu'une
question de style de code, feeling, expérience, etc.

Ne cherche pas a obtenir le "meilleur" code du premier coup, commence
par faire en sorte que ça fonctionne correctement.





OK, merci pour ta réponse ;-)
Bol
Le #21697811
Salut

Je fais ceci quand je veux reinit un tableau :

mon_tab = [];



Attention quand même, ca ne reinitialise pas le tableau
mais creer un deuxieme, et le remplace donc s'il est
referencé ailleurs, ca ne fonctionne pas

var a =[];
a[0]="toto";
var b = a;
a=[];
alert( a.length + ' ' + b.length );

A+
Bol
Mickaël Wolff
Le #21699971
Le 06/05/2010 14:22, Caius Pupus a écrit :
- mon_tab = new Array(); // Je le recrée donc je le vide



Comme dit plus bas, ça ne le recréé pas. C'est juste la référence
pointé par la variable qui est modifiée.

- mon_tab.length = 0; // Autre solution que j'ai vue sur le web



En plus d'être sémantiquement cavalier, j'ai des doutes quand à la
réalité de l'opération. Et j'aurais tendance à dire qu'il y a un risque
de fuite mémoire. Il faudrait que nous ayons la garantie que les
éléments référencés soient réellement libérés.

Laquelle de ces solutions est la plus recommandée (moins gourmande en
mémoire, rapidité, etc.) ? Y a-t-il d'autres solutions encore plus
fiables ?



Hop :

Array.prototype.clear = function() { this.splice(0, this.length) }
a.clear() ;

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Pascal
Le #21699961
Bonjour,

Mickaël Wolff a écrit :
- mon_tab.length = 0; // Autre solution que j'ai vue sur le web


En plus d'être sémantiquement cavalier, j'ai des doutes quand à la
réalité de l'opération.



Pourquoi ça ?
La propriété "length" est bien définie en lecture comme en écritu re.

Et j'aurais tendance à dire qu'il y a un risque
de fuite mémoire. Il faudrait que nous ayons la garantie que les
éléments référencés soient réellement libérés.



Avec le bout de code de Bol, si on remplace :
<script> a = [] </script>
par :
on a bien "b.length" qui vaut zéro à son tour.

Cordialement,
Pascal
SAM
Le #21699951
Le 5/6/10 6:39 PM, Bol a écrit :
Salut

Je fais ceci quand je veux reinit un tableau :

mon_tab = [];



Attention quand même, ca ne reinitialise pas le tableau
mais creer un deuxieme, et le remplace donc s'il est
referencé ailleurs, ca ne fonctionne pas

var a =[];
a[0]="toto";
var b = a;
a=[];
alert( a.length + ' ' + b.length );



Ha oui, marrant, 'b' grossit comme 'a' même après la copie
alors que le "vidage" de 'a' ne l'impressionne pas.

javascript:
var a =[];
a[0]="toto";
var b = a;
a[1] = 'truc';
a=[];
alert( a.length + ' ' + b.length );

Bon ... ce qui compte c'est que 'a' soit vidé, néanmoins, non ?

--
sm
Pascal
Le #21700521
SAM a écrit :
Ha oui, marrant, 'b' grossit comme 'a' même après la copie
alors que le "vidage" de 'a' ne l'impressionne pas.

javascript:
var a =[];
a[0]="toto";
var b = a;
a[1] = 'truc';
a=[];
alert( a.length + ' ' + b.length );



Normal, ce n'est pas une copie par valeur, mais par référence.
Comme pour tous les objets dans JS, d'ailleurs.

Cordialement,
Pascal
Bol
Le #21700511
Ha oui, marrant, 'b' grossit comme 'a' même après la copie
alors que le "vidage" de 'a' ne l'impressionne pas.



C'est le principe des references, et une nouvelle affectation
à "a" déreference le tableau/objet

A+
Bol
Caius Pupus
Le #21751341
Le 06/05/2010 14:22, la nouvelle vedette du web, Caius Pupus, a écrit :
Bonjour,

Quelle est la meilleure solution pour vider simplement un tableau ?
Pour un tableau nommé "mon_tab", je pourrais faire une des solutions
suivantes :
- mon_tab = new Array(); // Je le recrée donc je le vide
- mon_tab.length = 0; // Autre solution que j'ai vue sur le web

Laquelle de ces solutions est la plus recommandée (moins gourmande en
mémoire, rapidité, etc.) ? Y a-t-il d'autres solutions encore plus
fiables ?

Merci à vous ;-)

CP




Merci à tous pour vos précisions et vos explications ! :-)
Je crois que je vais opter pour : a=[];
C'est court, et ça me plaît ;-)

CP
Mickaël Wolff
Le #21761811
Le 06/05/2010 19:41, Pascal a écrit :
Bonjour,

Mickaël Wolff a écrit :
- mon_tab.length = 0; // Autre solution que j'ai vue sur le web


En plus d'être sémantiquement cavalier, j'ai des doutes quand à la
réalité de l'opération.



Pourquoi ça ?
La propriété "length" est bien définie en lecture comme en écriture.



Bon d'accord, le standard le définit.
intuitif.


--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Publicité
Poster une réponse
Anonyme