L' delete
opérateur est utilisé pour supprimer les propriétés des objets.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
Notez que, pour les tableaux, ce n'est pas la même chose que de supprimer un élément . Pour supprimer un élément d'un tableau, utilisez Array#splice
ou Array#pop
. Par exemple:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
Détails
delete
en JavaScript a une fonction différente de celle du mot-clé en C et C ++: il ne libère pas directement la mémoire. Au lieu de cela, son seul but est de supprimer les propriétés des objets.
Pour les tableaux, la suppression d'une propriété correspondant à un index crée un tableau clairsemé (c'est-à-dire un tableau contenant un "trou"). La plupart des navigateurs représentent ces indices de tableau manquants comme «vides».
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
Notez que delete
ne se déplace pas array[3]
dans array[2]
.
Différentes fonctions intégrées en JavaScript gèrent différemment les tableaux clairsemés.
for...in
sautera complètement l'index vide.
Une for
boucle traditionnelle renverra undefined
la valeur à l'index.
Toute méthode utilisant Symbol.iterator
retournera undefined
la valeur à l'index.
forEach
, map
Et reduce
sautera les index manquant.
Ainsi, l' delete
opérateur ne doit pas être utilisé dans le cas d'utilisation courant de suppression d'éléments d'un tableau. Les tableaux ont des méthodes dédiées pour supprimer des éléments et réallouer la mémoire: Array#splice()
et Array#pop
.
Array # splice (start [, deleteCount [, item1 [, item2 [, ...]]]])
Array#splice
mute le tableau et renvoie tous les index supprimés. deleteCount
les éléments sont supprimés de l'index start
et item1, item2... itemN
sont insérés dans le tableau à partir de l'index start
. Si deleteCount
est omis, les éléments de startIndex sont supprimés à la fin du tableau.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
Il y a aussi un nom similaire, mais différente, fonction sur Array.prototype
: Array#slice
.
Array # slice ([début [, fin]])
Array#slice
est non destructif et renvoie un nouveau tableau contenant les indices indiqués de start
à end
. Si elle end
n'est pas spécifiée, elle prend par défaut la fin du tableau. Si end
est positif, il spécifie l' index non inclus de base zéro sur lequel s'arrêter. S'il end
est négatif, il spécifie l'index sur lequel s'arrêter en comptant à partir de la fin du tableau (par exemple, -1 omettra l'index final). Si end <= start
, le résultat est un tableau vide.
let a = [0,1,2,3,4]
let slices = [
a.slice(0,2),
a.slice(2,2),
a.slice(2,3),
a.slice(2,5) ]
// a [0,1,2,3,4]
// slices[0] [0 1]- - -
// slices[1] - - - - -
// slices[2] - -[3]- -
// slices[3] - -[2 4 5]
Array # pop
Array#pop
supprime le dernier élément d'un tableau et renvoie cet élément. Cette opération modifie la longueur du tableau.