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”],
假设数字正在搞乱阵列。任何想法为什么?这是extendcript,这是javascript但对于photoshop,如果你想知道。但它大部分基于JS,所以它应该表现得像它。
答案 0 :(得分: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;
}
答案 1 :(得分:3)
啊...... Adobe JavaScript ......
您的问题是您实际上是循环遍历数组的索引,而不是值。所以,你可能有一个0 ... 4层,但第5层可能是一个文件夹。
建议:
[]
。for( x in Mylayers )
for(x in Mylayers){ var tmp = Mylayers[x]
然后使用x
答案 2 :(得分:1)
我不认为你正在做你认为你正在做的事情。 Javascript中的for..in循环不是您可能习惯的foreach循环,并且在大多数情况下是循环数组的不良选择。它不是将x
设置为数组中的实例元素,而是将x
设置为对象中的下一个键。在这种情况下,数值(0,1,2 ......)。不幸的是,它还会循环遍历Array实例上的对象属性(length,forEach等)。
你真的应该使用常规for循环:
var MyLayers = [ 'foo', 'bar', 'baz' ];
for(var i = 0; i < MyLayers.length; i += 1) {
app.activeDocument.layers[MyLayers[i]].visible = true;
}
您也不需要将事物显式设置为null。 Javascript是内存管理。