Comment faire pour supprimer l'élément de tableau dans la boucle forEach?
Je suis en train de supprimer un élément dans un tableau dans un forEach
boucle, mais éprouve de la difficulté avec les solutions standard que j'ai vu.
C'est ce que je suis en train d'essayer:
review.forEach(function(p){
if(p === '\u2022 \u2022 \u2022'){
console.log('YippeeeE!!!!!!!!!!!!!!!!')
review.splice(p, 1);
}
});
Je sais que c'est de monter dans la if
parce que je suis de voir YippeeeeeE!!!!!!!!!!!!!
dans la console.
MON PROBLÈME: je sais que ma boucle for et si la logique est solide, mais ma tentative de suppression de l'élément courant du tableau est un échec.
Mise à JOUR:
Essayé Xotic750 réponse, et l'élément n'est pas encore supprimée:
Ici est la fonction dans mon code:
review.forEach(function (item, index, object) {
if (item === '\u2022 \u2022 \u2022') {
console.log('YippeeeE!!!!!!!!!!!!!!!!')
object.splice(index, 1);
}
console.log('[' + item + ']');
});
Ici est la sortie où le tableau n'est pas encore supprimée:
[Scott McNeil]
[reviewed 4 months ago]
[ Mitsubishi is AMAZING!!!]
YippeeeE!!!!!!!!!!!!!!!!
[• • •]
Alors, évidemment, c'est d'aller dans l'instruction si, comme prévu, mais il est également évident que le [• • •] est toujours là.
- Est-il une raison pour laquelle vous êtes à l'aide de
forEach
? Si vous souhaitez supprimer des éléments, le plus approprié de la fonction estfilter
. - Pas si vous avez besoin de garder la référence au tableau d'origine.
- Oui, nous aimerions garder la référence au tableau d'origine.
- Il n'est pas clair à partir de votre question, quel est le problème que vous rencontrez? Pouvez-vous donner un exemple, peut-être un jsFiddle? Il semble que vous devriez peut-être à l'aide de la
index
attribut plutôt queitem
pour votresplice
- Désolé, ajout de précisions.
- Vous êtes connecté au
item
à l'intérieur de laforEach
, ajouterconsole.log(review);
après cela, comme dans mon exemple.
Vous devez vous connecter pour publier un commentaire.
Il semble que vous essayez de faire cela?
Faire évoluer et muter un tableau à l'aide Tableau.le prototype.splice
JS:
HTML:
Qui fonctionne très bien pour de simples cas où vous n'avez pas 2 valeurs adjacentes éléments de tableau, l'autre sage vous avez ce problème.
JS:
HTML:
Que pouvons-nous faire à propos de ce problème lors de l'itération et de la mutation d'un tableau? Eh bien, la solution habituelle est de fonctionner en sens inverse. À l'aide de ES3 alors que mais vous pouvez utiliser pour de sucre si vous préférez
JS:
HTML:
Ok, mais vous avez voulu vous avez voulu utiliser ES5 itération méthodes. Bien et option serait d'utiliser Tableau.le prototype.filtre mais ce n'est pas muter le tableau d'origine, mais en crée une nouvelle, si bien que vous pouvez obtenir la bonne réponse, il n'est pas ce que vous avez spécifié.
On peut aussi utiliser ES5 Tableau.le prototype.reduceRight, non pas pour sa réduction à la propriété plutôt par son itération de la propriété, c'est à dire effectuer une itération dans le sens inverse.
JS:
HTML:
Ou nous pourrions utiliser ES5 Tableau.protoype.indexOf comme si.
JS:
HTML:
Mais vous souhaitez utiliser ES5 Tableau.le prototype.forEach, que pouvons-nous faire? Et bien nous avons besoin d'utiliser Tableau.le prototype.tranche pour faire une copie de la matrice et Tableau.le prototype.inverse afin que nous puissions travailler dans le sens inverse pour muter le tableau d'origine.
JS:
HTML:
Enfin ES6 nous offre quelques solutions de rechange, où nous n'avons pas besoin de faire peu profondes des copies et de les inverser. Notamment, on peut utiliser Les générateurs et les Itérateurs. Toutefois, le soutien est relativement faible à l'heure actuelle.
JS:
HTML:
Quelque chose à noter dans tout ce qui précède est que, si vous étiez décapage NaN à partir de la matrice de comparaison avec d'égal à égal n'est pas d'aller travailler, car en Javascript
NaN === NaN
est faux. Mais nous allons ignorer que dans les solutions que elle encore d'une autre indéterminé de cas de bord.Donc là, nous avons, une réponse plus complète avec des solutions qui ont toujours des cas limites. Le premier exemple de code est toujours correct, mais comme l'a dit, il n'est pas sans problèmes.
console.log(review);
après laforEach
, comme dans mon exemple.Array#splice
etArray#forEach
. C'est génial que vous avez alerté les gens à un problème potentiel avec cette façon de faire, mais je ne pense pas qu'il mérite un vote car il aborde le problème réel que l'OP avait.Utilisation
Array.prototype.filter
au lieu deforEach
:Vous pouvez également utiliser indexOf au lieu de faire ce
J'ai compris que vous souhaitez supprimer à partir du tableau à l'aide d'une condition et d'avoir un autre tableau contenant les éléments supprimés à partir du tableau. Est droit?
Comment à ce sujet?
JS:
Espérons que cette aide...
En passant, j'ai comparé "pour la boucle' à 'forEach'.
Si l'option supprimer dans le cas d'une chaîne contient "f", un résultat est différent.
JS:
Et enlever à chaque itération, qui est aussi un résultat est différent.
JS:
De ce qui suit va vous donner tous les éléments qui n'est pas à la hauteur de vos caractères spéciaux!
Voici comment vous devez le faire:
if
déclaration.item, index, object