1
function showMyLayers() {

                            var Mylayers = [
                                    ["ISO"],
                                    ["ODO"],
                                    ["Black Round Mask"],
                                    ["red glow on gauges"],
                                    ["Compass"],
                                    ["4 Gauges"],
                                    ["Upper Stainless Steel"],
                                    ["Background"]
                            ];

                    for (x in Mylayers) {
                            var activelayer = app.activeDocument.layers[x];
                            activelayer.visible = true;
                            activelayer = null;
                    }
} showMyLayers();  

它出错了:[“4 Gauges”],

假设数字弄乱了数组。任何想法为什么?这是extendscript,它是javascript,但如果你想知道的话,它适用于photoshop。但它大部分基于 JS,所以它应该表现得像它。

4

3 回答 3

4

循环是for..in迭代对象。要遍历数组,请使用经典for循环。此外,您所拥有的是一个数组数组,这可能不是您想要的。

var Mylayers = [
    "ISO",
    "ODO",
    "Black Round Mask",
    "red glow on gauges",
    "Compass",
    "4 Gauges",
    "Upper Stainless Steel",
    "Background"
];

for (var i = 0; i < Mylayers.length; i++) {
    var x = Mylayers[i];
    var activelayer = app.activeDocument.layers[x];
    activelayer.visible = true;
    activelayer = null;
}
于 2011-08-30T20:24:47.617 回答
3

啊... Adob​​e JavaScript...

您的问题是您实际上是在循环遍历数组的索引,而不是值。因此,您可能有第 0...4 层,但第 5 层可能是一个文件夹。

建议:

  1. 您正在使用嵌套数组而不是字符串。我会摆脱[]数组中的项目。
  2. 代替for( x in Mylayers )然后使用 x,使用for(x in Mylayers){ var tmp = Mylayers[x]
  3. 我不确定 ExtendScript,但在 JSFL(Flash 的等价物)中,访问图层对象的方法是图层 [timeline.getLayerIndex(layerName)]
于 2011-08-30T20:23:51.627 回答
1

我不认为你在做你认为你在做的事。Javascript 中的 for..in 循环不是您可能习惯的 foreach 循环,而且在大多数情况下,它不是遍历数组的最佳选择。它不是设置x为数组中的实例元素,而是设置x为对象中的下一个键。在这种情况下,一个数值 (0, 1, 2...)。不幸的是,它还会循环遍历 Array 实例上的对象属性(长度、forEach 等)。

你真的应该使用常规的 for 循环:

var MyLayers = [ 'foo', 'bar', 'baz' ];

for(var i = 0; i < MyLayers.length; i += 1) {
   app.activeDocument.layers[MyLayers[i]].visible = true;
}

您也不需要明确地将事物设置为空。Javascript是内存管理的。

于 2011-08-30T20:26:04.087 回答