Javascript 不确定如何解析数组中的字符串

Javascript 不确定如何解析数组中的字符串,javascript,javascript-objects,Javascript,Javascript Objects,我正在尝试解析包含字符串的数组的结果 myArray = ['thisComp.layer("Body Text")','thisComp.layer("Header")']; a = myArray[selector]; aRect = a.sourceRectAtTime(5); 选择器是一个滑块控件,用于选择myArray中的项目,并按预期工作 最后一行抛出一个错误——“a.SourceRecattime不是函数”。我相信在第三行中使用第二行之前,我必须解析第二行的结果,但我无法解决

我正在尝试解析包含字符串的数组的结果

myArray = ['thisComp.layer("Body Text")','thisComp.layer("Header")'];

a = myArray[selector];

aRect = a.sourceRectAtTime(5);
选择器是一个滑块控件,用于选择myArray中的项目,并按预期工作


最后一行抛出一个错误——“a.SourceRecattime不是函数”。我相信在第三行中使用第二行之前,我必须解析第二行的结果,但我无法解决这个看似简单的问题。

您在评论中说过,
选择器将是
0
1
,诸如此类

您的数组包含字符串,但您在评论中说希望能够获取实际内容,而不是字符串

如果希望在创建数组时按原样使用这些值,则如注释中所述,应删除引号:

myArray = [thisComp.layer("Body Text"), thisComp.layer("Header")];
调用
thisComp.layer(“Body Text”)
thisComp.layer(“Header”)
并将其返回值存储在数组中

但你在评论中说的并不是你想要的。我唯一能想到的另一件事是,当您使用数组时,您希望稍后调用这些函数。如果是这样,您有两个选择:

  • 如果总是
    此复合层(…)
    ,则仅将字符串
    “Body Text”
    “Header”
    存储在数组中,然后:

    myArray = ["Body Text", "Header"];
    // ...
    a = thisComp.layer(myArray[selector]);
    aRect = a.sourceRectAtTime(5);
    
  • 如果内容变化超过此范围,请存储函数,然后在准备使用时调用它们:

    • 在ES2015+中,您可能会使用箭头函数:

      myArray = [
          () => thisComp.layer("Body Text"),
          () => thisComp.layer("Header")
      ];
      // ...
      a = myArray[selector]();
      aRect = a.sourceRectAtTime(5);
      
    • 在ES5中,您可能会使用
      bind
      (但在ES2015+中也可以这样做):


非常肯定错误不仅仅说明“不是函数”。。。请将您的问题格式化为代码(请参阅)。您还可以使用帮助其他人重现该问题。非常确定
myArray
的输出是
[0]=“thisComp.layer(“正文”),[1]=“thisComp.layer(“标题”),因为您正在将数组的值设置为字符串。删除
myArray=[thisComp.layer(“正文”),thisComp.layer(“标题”)选择器为1或0。确切地说,选择器是指Adobe After Effects(AE)中的滑块表达式控件。SourceRecattime是AE中的内置表达式方法。完整的错误消息如下所示-a.sourcerecattime不是function@RolandKahlenberg您的数组是字符串数组,而不是对象数组。删除勾号
@silentw-我最初是这样做的。然而,当选择器为0时,我得到的结果是主体文本,当选择器为1时,结果是头部。因此,我确实需要单引号来指定数组中的字符串。另外,错误在第二行。谢谢TJ!您提供的第一个选项确实解决了这个问题-知道它为什么有效吗?这是SourceRecattime方法需要字符串或对象的情况吗?如果是这样的话,我将如何解析myArray,使我的初始代码能够按预期工作?@RolandKahlenberg-很高兴这有帮助!“它是……SourceRecattime方法需要字符串还是对象?”不,它显然需要特定种类的对象(可能是
layer
方法返回的“layer”对象),而不是字符串。“…我如何解析myArray,使我的初始代码能够按预期工作?”您不解析数组,而是解析字符串。但是保存代码字符串,然后稍后解析(好吧,评估)它们是一种反模式,需要使用像
eval
newfunction
这样的大锤。如果您需要推迟通话,最好执行上述操作之一。
myArray = [
    thisComp.layer.bind(thisComp, "Body Text"),
    thisComp.layer.bind(thisComp, "Header")
];
// ...
a = myArray[selector]();
aRect = a.sourceRectAtTime(5);