J'ai un tableau d'éléments et j'ai besoin d'en supprimer certains. Le problème est que JavaScript ne semble pas avoir de boucle pour chaque boucle et que si j'utilise une boucle for, je rencontre des problèmes avec elle qui essaie essentiellement de vérifier des éléments au-delà des limites du tableau ou des éléments manquants dans le tableau car les index changent. . Laissez-moi vous montrer ce que je veux dire:
var elements = [1, 5, 5, 3, 5, 2, 4];
for(var i = 0; i < elements.length; i++){
if(elements[i] == 5){
elements.splice(i, 1);
}
}
Le problème est que lorsque les éléments [1] sont supprimés, les éléments [2] deviennent des éléments [1]. Le premier problème est que certains éléments ne sont jamais examinés. L’autre problème est que .length change et si je codais de manière stricte les limites, je pourrais alors essayer d’examiner des éléments au-delà des limites du tableau. Alors, quelle est la meilleure façon de faire cette chose incroyablement simple?
Commencez par le haut!
var elements = [1, 5, 5, 3, 5, 2, 4];
for(var i = elements.length -1; i >= 0 ; i--){
if(elements[i] == 5){
elements.splice(i, 1);
}
}
Vous pouvez utiliser la méthode filter
ici:
var elements = [1, 5, 5, 3, 5, 2, 4].filter(function(a){return a !== 5;});
//=> elements now [1,3,2,4]
Ou si vous ne voulez pas toucher elements
:
var elementsfiltered
,elements = [1, 5, 5, 3, 5, 2, 4]
.filter( function(a){if (a!==5) this.Push(a); return true;},
elementsfiltered = [] );
//=> elementsfiltered = [1,3,2,4], elements = [1, 5, 5, 3, 5, 2, 4]
Voir Documentation MDN pour filter
Sinon, vous pouvez étendre le Array.prototype
Array.prototype.remove = Array.prototype.remove || function(val){
var i = this.length;
while(i--){
if (this[i] === val){
this.splice(i,1);
}
}
};
var elements = [1, 5, 5, 3, 5, 2, 4];
elements.remove(5);
//=> elements now [1,3,2,4]
var elements = [1, 5, 5, 3, 5, 2, 4];
var i = elements.length;
while (i--) {
if (elements[i] == 5) {
elements.splice(i, 1);
}
}
console.log(elements);
Vous pouvez simplement décrémenter i
chaque fois que vous supprimez un élément.
var elements = [1, 5, 5, 3, 5, 2, 4];
var l = elements.length;
for(var i = 0; i < l; i++){
if(elements[i] == 5){
elements.splice(i, 1);
i--;
}
}
console.log(elements);
Utiliser Array.shift () :
var array = [1, 2, 3, 'a', 'b', 'c'];
while (array.length > 0) {
console.log(array.shift());
}
Edit: Ne correspond probablement pas aux spécifications. J'ai mal interprété la question (seulement supprimer certains éléments ) et je suis trop impatient d'ajouter une méthode qui n'a pas encore été mentionnée ...
Voici un exemple d'utilisation de Array.indexOf , while et Array.splice pour supprimer des éléments en ligne.
var elements = [1, 5, 5, 3, 5, 2, 4];
var remove = 5;
var index = elements.indexOf(remove);
while (index !== -1) {
elements.splice(index, 1);
index = elements.indexOf(remove);
}
console.log(elements);
Sur jsfiddle