[...] je ne vois pas comment employer tata.splice() dans la mesure ou il faut donner la liste des éléments déplacés (ceux qui se trouvent derrière l'élément supprimé) comme argument du "splice ()", ce qui ne me semble pas évident
Mais non !
Pour splice il faut deux arguments obligatoires : - le rang de l'élément de départ : start - le nombre d'éléments à supprimer de l'Array
et des éléments facultatifs item1, item2... qui sont des éléments *à insérer* à l'endroit où on a supprimé...
Exemples : 1. a = new Array(0, 1, 2, 3, 4) //length 5 a.splice(1,3); //on supprime 3 éléments à partir de celui de rang 1 (le 2e don c) //a est alors 0 4, length 2
Y.D.
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a si sa longueur n'est pas figée ?
jacek
YD wrote:
[...] je ne vois pas comment employer tata.splice() dans la mesure
ou il faut donner la liste des éléments déplacés (ceux qui se
trouvent derrière l'élément supprimé) comme argument du "splice ()",
ce qui ne me semble pas évident
Mais non !
Pour splice il faut deux arguments obligatoires :
- le rang de l'élément de départ : start
- le nombre d'éléments à supprimer de l'Array
et des éléments facultatifs item1, item2... qui sont
des éléments *à insérer* à l'endroit où on a supprimé...
Exemples :
1. a = new Array(0, 1, 2, 3, 4)
//length 5
a.splice(1,3);
//on supprime 3 éléments à partir de celui de rang 1 (le 2e don c)
//a est alors 0 4, length 2
Y.D.
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a
si sa longueur n'est pas figée ?
[...] je ne vois pas comment employer tata.splice() dans la mesure ou il faut donner la liste des éléments déplacés (ceux qui se trouvent derrière l'élément supprimé) comme argument du "splice ()", ce qui ne me semble pas évident
Mais non !
Pour splice il faut deux arguments obligatoires : - le rang de l'élément de départ : start - le nombre d'éléments à supprimer de l'Array
et des éléments facultatifs item1, item2... qui sont des éléments *à insérer* à l'endroit où on a supprimé...
Exemples : 1. a = new Array(0, 1, 2, 3, 4) //length 5 a.splice(1,3); //on supprime 3 éléments à partir de celui de rang 1 (le 2e don c) //a est alors 0 4, length 2
Y.D.
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a si sa longueur n'est pas figée ?
jacek
Etienne SOBOLE
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a si sa longueur n'est pas figée ?
Bonne question !
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a
si sa longueur n'est pas figée ?
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a si sa longueur n'est pas figée ?
Bonne question !
Olivier Miakinen
1. a = new Array(0, 1, 2, 3, 4) //length 5 a.splice(1,3); //on supprime 3 éléments à partir de celui de rang 1 (le 2e donc) //a est alors 0 4, length 2
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a si sa longueur n'est pas figée ?
Euh... Je dirais : b = a; b.splice(2, 1);
Non ?
1. a = new Array(0, 1, 2, 3, 4)
//length 5
a.splice(1,3);
//on supprime 3 éléments à partir de celui de rang 1 (le 2e donc)
//a est alors 0 4, length 2
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a
si sa longueur n'est pas figée ?
1. a = new Array(0, 1, 2, 3, 4) //length 5 a.splice(1,3); //on supprime 3 éléments à partir de celui de rang 1 (le 2e donc) //a est alors 0 4, length 2
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a si sa longueur n'est pas figée ?
Euh... Je dirais : b = a; b.splice(2, 1);
Non ?
YD
1. a = new Array(0, 1, 2, 3, 4) //length 5 a.splice(1,3); //on supprime 3 éléments à partir de celui de rang 1 (le 2e donc) //a est alors 0 4, length 2 mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a
si sa longueur n'est pas figée ?
Euh... Je dirais : b = a; b.splice(2, 1);
Non ?
Hmmm... b=a; Si a est un objet javascript (et un Array en est un) l'affectation se fait par référence c.-à-d. b est un autre nom pour désigner l'objet désigné par a également. b.splice(2,1) va modifier b et donc a (deux référents pour un même objet) !
Mais une précision s'impose à l'attention de jacek55. Les méthodes de Arrrays modifient presque toutes l'Array sur lequel elles sont appliquées. Si on veut obtenir une copie d'un objet, ce n'est pas trivial ! a.splice(2,1) modifie l'objet a.
Il ne faut pas écrire -- pour récupérer le résultat : b = a.splice(2,1) car non seulement on ne récupère pas en b une copie de a moins son 3e élément mais a est modifié et b est un objet Array contenant ce qui est extrait de a, dans ce cas, un seul élément.
-- Y.D.
1. a = new Array(0, 1, 2, 3, 4)
//length 5
a.splice(1,3);
//on supprime 3 éléments à partir de celui de rang 1 (le 2e donc)
//a est alors 0 4, length 2
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a
si sa longueur n'est pas figée ?
Euh... Je dirais :
b = a;
b.splice(2, 1);
Non ?
Hmmm... b=a;
Si a est un objet javascript (et un Array en est un) l'affectation
se fait par référence c.-à-d. b est un autre nom pour désigner
l'objet désigné par a également.
b.splice(2,1) va modifier b et donc a (deux référents pour un même
objet) !
Mais une précision s'impose à l'attention de jacek55. Les méthodes
de Arrrays modifient presque toutes l'Array sur lequel elles sont
appliquées. Si on veut obtenir une copie d'un objet, ce n'est pas
trivial ! a.splice(2,1) modifie l'objet a.
Il ne faut pas écrire -- pour récupérer le résultat :
b = a.splice(2,1)
car non seulement on ne récupère pas en b une copie de a moins son
3e élément mais a est modifié et b est un objet Array contenant ce
qui est extrait de a, dans ce cas, un seul élément.
1. a = new Array(0, 1, 2, 3, 4) //length 5 a.splice(1,3); //on supprime 3 éléments à partir de celui de rang 1 (le 2e donc) //a est alors 0 4, length 2 mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a
si sa longueur n'est pas figée ?
Euh... Je dirais : b = a; b.splice(2, 1);
Non ?
Hmmm... b=a; Si a est un objet javascript (et un Array en est un) l'affectation se fait par référence c.-à-d. b est un autre nom pour désigner l'objet désigné par a également. b.splice(2,1) va modifier b et donc a (deux référents pour un même objet) !
Mais une précision s'impose à l'attention de jacek55. Les méthodes de Arrrays modifient presque toutes l'Array sur lequel elles sont appliquées. Si on veut obtenir une copie d'un objet, ce n'est pas trivial ! a.splice(2,1) modifie l'objet a.
Il ne faut pas écrire -- pour récupérer le résultat : b = a.splice(2,1) car non seulement on ne récupère pas en b une copie de a moins son 3e élément mais a est modifié et b est un objet Array contenant ce qui est extrait de a, dans ce cas, un seul élément.
-- Y.D.
Olivier Miakinen
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a si sa longueur n'est pas figée ?
Euh... Je dirais : b = a; b.splice(2, 1);
Non ?
Hmmm... b=a; Si a est un objet javascript (et un Array en est un) l'affectation se fait par référence c.-à-d. b est un autre nom pour désigner l'objet désigné par a également. b.splice(2,1) va modifier b et donc a (deux référents pour un même objet) !
Ah oui, en effet. Note que ça donne quand même le résultat voulu, même s'il y a un effet de bord que ne voulait peut-être pas Jacek.
Mais une précision s'impose à l'attention de jacek55. Les méthodes de Arrays modifient presque toutes l'Array sur lequel elles sont appliquées. Si on veut obtenir une copie d'un objet, ce n'est pas trivial ! a.splice(2,1) modifie l'objet a.
Est-ce que ceci marcherait ? b = a.slice(0); b.splice(2, 1);
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a
si sa longueur n'est pas figée ?
Euh... Je dirais :
b = a;
b.splice(2, 1);
Non ?
Hmmm... b=a;
Si a est un objet javascript (et un Array en est un) l'affectation
se fait par référence c.-à-d. b est un autre nom pour désigner
l'objet désigné par a également.
b.splice(2,1) va modifier b et donc a (deux référents pour un même
objet) !
Ah oui, en effet. Note que ça donne quand même le résultat voulu, même
s'il y a un effet de bord que ne voulait peut-être pas Jacek.
Mais une précision s'impose à l'attention de jacek55. Les méthodes
de Arrays modifient presque toutes l'Array sur lequel elles sont
appliquées. Si on veut obtenir une copie d'un objet, ce n'est pas
trivial ! a.splice(2,1) modifie l'objet a.
Est-ce que ceci marcherait ?
b = a.slice(0);
b.splice(2, 1);
mais comment faire pour obtenir b = [0,1,3,4], length 4 à partir de a si sa longueur n'est pas figée ?
Euh... Je dirais : b = a; b.splice(2, 1);
Non ?
Hmmm... b=a; Si a est un objet javascript (et un Array en est un) l'affectation se fait par référence c.-à-d. b est un autre nom pour désigner l'objet désigné par a également. b.splice(2,1) va modifier b et donc a (deux référents pour un même objet) !
Ah oui, en effet. Note que ça donne quand même le résultat voulu, même s'il y a un effet de bord que ne voulait peut-être pas Jacek.
Mais une précision s'impose à l'attention de jacek55. Les méthodes de Arrays modifient presque toutes l'Array sur lequel elles sont appliquées. Si on veut obtenir une copie d'un objet, ce n'est pas trivial ! a.splice(2,1) modifie l'objet a.
Est-ce que ceci marcherait ? b = a.slice(0); b.splice(2, 1);
YD
[...] Les méthodes de Arrays modifient presque toutes l'Array sur lequel elles sont appliquées. Si on veut obtenir une copie d'un objet, ce n'est pas trivial ! a.splice(2,1) modifie l'objet a.
Est-ce que ceci marcherait ? b = a.slice(0); b.splice(2, 1);
Ça marche tout à fait, le slice(0) permet de copier l'Array.
Mais... une remarque tout de même, ou une mise en garde plutôt. Si l'Array contient un ou plusieurs objets parmi ses éléments, ceux-ci ne sont pas copiés, seule leur référence est passée.
Et comme rien ne vaut un exemple... <script type="text/javascript"> document.writeln('<pre>');
a = new Array(0,1,2,new Array('a','b','c')); b = a.slice(0);
document.write('a.length = '+a.length+'t'); for (var i in a) document.write('; a['+i+'] = '+a[i]); document.writeln(); document.write('b.length = '+b.length+'t');
for (var i in b) document.write('; b['+i+'] = '+b[i]); document.writeln();
document.write('a.length = '+a.length+'t'); for (var i in a) document.write('; a['+i+'] = '+a[i]); document.writeln(); document.write('b.length = '+b.length+'t'); for (var i in b) document.write('; b['+i+'] = '+b[i]); document.writeln(); </script>
-- Y.D.
[...] Les méthodes
de Arrays modifient presque toutes l'Array sur lequel elles sont
appliquées. Si on veut obtenir une copie d'un objet, ce n'est pas
trivial ! a.splice(2,1) modifie l'objet a.
Est-ce que ceci marcherait ?
b = a.slice(0);
b.splice(2, 1);
Ça marche tout à fait, le slice(0) permet de copier l'Array.
Mais... une remarque tout de même, ou une mise en garde plutôt.
Si l'Array contient un ou plusieurs objets parmi ses éléments,
ceux-ci ne sont pas copiés, seule leur référence est passée.
Et comme rien ne vaut un exemple...
<script type="text/javascript">
document.writeln('<pre>');
a = new Array(0,1,2,new Array('a','b','c'));
b = a.slice(0);
document.write('a.length = '+a.length+'t');
for (var i in a)
document.write('; a['+i+'] = '+a[i]);
document.writeln();
document.write('b.length = '+b.length+'t');
for (var i in b)
document.write('; b['+i+'] = '+b[i]);
document.writeln();
document.write('a.length = '+a.length+'t');
for (var i in a)
document.write('; a['+i+'] = '+a[i]);
document.writeln();
document.write('b.length = '+b.length+'t');
for (var i in b)
document.write('; b['+i+'] = '+b[i]);
document.writeln();
</script>
[...] Les méthodes de Arrays modifient presque toutes l'Array sur lequel elles sont appliquées. Si on veut obtenir une copie d'un objet, ce n'est pas trivial ! a.splice(2,1) modifie l'objet a.
Est-ce que ceci marcherait ? b = a.slice(0); b.splice(2, 1);
Ça marche tout à fait, le slice(0) permet de copier l'Array.
Mais... une remarque tout de même, ou une mise en garde plutôt. Si l'Array contient un ou plusieurs objets parmi ses éléments, ceux-ci ne sont pas copiés, seule leur référence est passée.
Et comme rien ne vaut un exemple... <script type="text/javascript"> document.writeln('<pre>');
a = new Array(0,1,2,new Array('a','b','c')); b = a.slice(0);
document.write('a.length = '+a.length+'t'); for (var i in a) document.write('; a['+i+'] = '+a[i]); document.writeln(); document.write('b.length = '+b.length+'t');
for (var i in b) document.write('; b['+i+'] = '+b[i]); document.writeln();
document.write('a.length = '+a.length+'t'); for (var i in a) document.write('; a['+i+'] = '+a[i]); document.writeln(); document.write('b.length = '+b.length+'t'); for (var i in b) document.write('; b['+i+'] = '+b[i]); document.writeln(); </script>