2011-01-26 2 views
0

J'ai ce code qui génère un tableau d'informations sur l'endroit où les directives sont définies dans n'importe quel document Photoshop.Photoshop JSX - Utilisation de la méthode Split sur un tableau, pourquoi ne fonctionne-t-il pas et que l'autre fonctionne?

var guides = app.activeDocument.guides;// get the current doc's guides 

var guideArray = []; 

for (var g = 0; g < guides.length; g++){ 
guideArray.push([guides[g].direction, guides[g].coordinate ]);// store the guide properties for later 
} 

prompt("title", guideArray); 

Et l'invite donne cette sortie:

Direction.VERTICAL, 47 px, Direction.VERTICAL, 240 px, Direction.VERTICAL, 182 px, Direction.VERTICAL, 351 px, Direction.VERTICAL, 119 px, Direction.VERTICAL, 21 px, Direction.HORIZONTAL, 89 px, Direction.HORIZONTAL, 199 px, Direction.HORIZONTAL, 54 px, Direction.HORIZONTAL, 171 px

Je veux diviser ce tableau en ajoutant ce code

var b = []; 

for (var i = 0; i < guideArray.length; i++){ 

var b = guideArray[i].split(","); 

} 

qui me donne cette erreur,

exceptionMessage ([Erreur: ReferenceError: guideArray [i] .split n'est pas une fonction])

Pourquoi? En ignorant le but de ce que je fais (je l'ai déjà compris d'une manière plus élégante), je suis curieux de savoir pourquoi cela échoue.

Je suis vraiment curieux parce que j'essayé ceci et cela fonctionne,

var guides = app.activeDocument.guides;// get the current doc's guides 

var guideArray = []; 

for (var g = 0; g < guides.length; g++){ 

guideArray.push([guides[g].direction, guides[g].coordinate ]);// store the guide properties for later 

} 

var guideString = guideArray.toString(); 

var b = guideString.split("x,"); 

for (var i = 0; i < b.length; i++){ 

var c = b[i].split(","); 

} 

alert(c[1]); 

Et cela fonctionne, même si je fais apparemment la même chose avec scission dans la boucle comme ci-dessus.

Répondre

0

Le deuxième bit de code est défectueux je pense. Il a seulement des valeurs pour c [0] et c [1]. Je pense que c'est peut-être parce que je ne l'ai pas défini comme un tableau, et que je le redéfinis constamment dans ma boucle for. Je ne suis pas sûr pourquoi il y a des valeurs distinctes pour 0 (Direction.VERTICAL) et 1 (47 px) si.

Voici donc ma solution au premier problème que j'ai évoqué. J'ai juste besoin d'ajouter la méthode .toString() dans ma boucle, comme ça.

var guides = app.activeDocument.guides;// get the current doc's guides 

var guideArray = []; 

for (var g = 0; g < guides.length; g++){ 
guideArray.push([guides[g].direction, guides[g].coordinate ]);// store the guide properties for later 
} 



var b = []; 

for (var i = 0; i < guideArray.length; i++){ 

    b[i] = guideArray[i].toString().split(","); 

} 

Maintenant le tableau b est rempli avec les résultats de division attendus.

Je suppose que split est finicky et ne peut être exécuté que sur une chaîne et non sur un élément de tableau.

Questions connexes