2017-10-04 6 views
2

Photoshop CC 2017. En utilisant cette boucle pour supprimer des chemins un par un dans les résultats des chemins (sur 8) étant supprimé seulement:JavaScript Photoshop supprimer les chemins un par un bug?

for(i = 0; i < app.activeDocument.pathItems.length; i++) { 
      alert(i) 
      app.activeDocument.pathItems[i].remove(); 
     } 

La longueur se rapporte comme 8. Cependant alert (i) montre seulement 4 fois. Tous les chemins sont supprimés uniquement si vous exécutez la boucle plusieurs fois. Je les supprime un par un parce que je veux garder un chemin avec un certain nom. Des idées?

+2

Copie possible de [Boucle dans la matrice et suppression d'éléments, sans rupture de boucle] (https://stackoverflow.com/questions/9882284/looping-through-array-and-removing-items-without-breaking-for- loop) – Ivar

+1

Fondamentalement, vous supprimez un élément, ce qui décrémente '.length'. Vous incrémentez aussi le 'i', donc au moment où votre' i' = 4, vous n'avez plus que 4 éléments dans votre tableau, donc c'est fini. – Ivar

+0

Merci Ivar, c'est la solution! – CristianC

Répondre

1

Vous modifiez pathItems lorsque vous le parcourez en boucle. Lorsque vous supprimez l'élément i, il y aura un nouvel élément à la position i que vous ignorez. Si vous faites la boucle arrière, il ne causera aucun problème

for(i = app.activeDocument.pathItems.length -1; i >= 0; i--) { 
    alert(i) 
    app.activeDocument.pathItems[i].remove(); 
} 
+0

Oui, cela fonctionne aussi. J'ai également découvert en utilisant le commentaire d'Ivar, je peux boucler à travers le tableau à l'envers. Je crois que l'utilisation de la boucle while pour supprimer l'élément [0] posera des problèmes si je veux conserver un certain élément (avec un certain nom). – CristianC

1

Vous pouvez utiliser pathItems.removeAll() dans ce cas.

+0

Je les supprime un par un parce que je veux garder un chemin avec un certain nom. – CristianC