Je l'ai fait :
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Je veux être capable de faire quelque chose comme :
array.remove("B");
mais il n'y a pas de fonction de suppression. Comment faire ?
Je l'ai fait :
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Je veux être capable de faire quelque chose comme :
array.remove("B");
mais il n'y a pas de fonction de suppression. Comment faire ?
Je suis en train de mettre à jour ce fil de discussion avec une solution plus récente d'une ligne :
let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']
L'idée est de filtrer le tableau en sélectionnant tous les éléments différents de celui que vous voulez supprimer.
Note : supprimera toutes les occurrences.
EDIT :
Si vous voulez supprimer uniquement la première occurrence :
t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']
Cette solution renvoie une copie du tableau, alors que l'utilisation de splice supprime le ou les éléments en place. La solution que vous choisissez dépend du contexte.
@Regis En fait non, arr.filter retourne un nouveau tableau. Donc arr.filter(e => e!== 'B') ne modifiera pas arr. Ou peut-être que je n'ai pas bien compris votre commentaire ?
Parcourez la liste en boucle dans l'ordre inverse, et utilisez la fonction .splice
méthode.
var array = ['A', 'B', 'C']; // Test
var search_term = 'B';
for (var i=array.length-1; i>=0; i--) {
if (array[i] === search_term) {
array.splice(i, 1);
// break; //<-- Uncomment if only the first term has to be removed
}
}
L'ordre inverse est important lorsque tous les occurrences du terme de recherche doivent être supprimées. Sinon, le compteur augmentera, et vous sauterez des éléments.
Lorsque seule la première occurrence doit être supprimée, la méthode suivante fonctionne également :
var index = array.indexOf(search_term); // <-- Not supported in <IE9
if (index !== -1) {
array.splice(index, 1);
}
Je suppose que c'est parce qu'il est censé être légèrement plus rapide d'itérer en sens inverse.
@BenClayton : Merci. FWIW, en JavaScript, ce n'est pas vrai de manière fiable. Le décompte jusqu'à 0
n'est pas automatiquement plus rapide qu'elle ne l'est, par exemple, en C. Tant que vous cachez la limite, bien sûr, ce qui compliquerait les choses si vous continuez après le premier match (mais pas si vous vous arrêtez dessus).
Liste des One Liners
Résolvons ce problème pour ce tableau :
var array = ['A', 'B', 'C'];
1. Ne retirez que le premier : Utilisation Si vous êtes sûr que l'article existe
array.splice(array.indexOf('B'), 1);
2. Ne retirez que le dernier : Utiliser Si vous êtes sûr que l'article existe
array.splice(array.lastIndexOf('B'), 1);
3. Supprimez toutes les occurrences :
array = array.filter(v => v !== 'B');
Vous devez trouver l'emplacement de ce que vous cherchez avec .indexOf()
puis l'enlever avec .splice()
function remove(arr, what) {
var found = arr.indexOf(what);
while (found !== -1) {
arr.splice(found, 1);
found = arr.indexOf(what);
}
}
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
remove(array, 'B');
alert(array);
Cela permettra de régler tous les cas de figure.
Pour les navigateurs qui ne prennent pas en charge .indexOf()
vous pouvez ajouter ce à votre fichier javascript.
Oui, élégant. Si vous avez besoin d'une option pour ne supprimer que certains éléments, par exemple seulement le premier : la même mise à jour : jsfiddle.net/qpZFd/9
J'obtiens toujours l'erreur suivante : Uncaught ReferenceError: array is not defined
. Qu'est-ce qui ne va pas ?
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
5 votes
Une combinaison de
.indexOf()
y.splice()
devrait faire l'affaire. Ou peut-être, alternativement,.filter()
.1 votes
Voir ici : stackoverflow.com/questions/3954438/
0 votes
Duplicata possible de Comment supprimer un élément d'un tableau par valeur ?