Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vider un tableau

21 réponses
Avatar
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

10 réponses

1 2 3
Avatar
Laurent vilday
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
Avatar
Caius Pupus
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 ;-)
Avatar
Bol
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
Avatar
Mickaël Wolff
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
Avatar
Pascal
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 :
<script> a.length = 0 </script>
on a bien "b.length" qui vaut zéro à son tour.

Cordialement,
Pascal
Avatar
SAM
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
Avatar
Pascal
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
Avatar
Bol
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
Avatar
Caius Pupus
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
Avatar
Mickaël Wolff
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.
<http://bclary.com/2004/11/07/#a-15.4.5.1> Mais je ne trouve pas ça
intuitif.


--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
1 2 3