首页 > 解决方案 > 不确定如何解析数组中的字符串

问题描述

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

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

a = myArray[selector];

aRect = a.sourceRectAtTime(5);

selector 是一个滑块控件,用于选择 myArray 中的项目,它按预期工作。

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

标签: javascriptjavascript-objects

解决方案


你在评论中说过会selector是这样的事情。01

您的数组包含strings,但您在评论中说过您希望能够获得实际的东西,而不是字符串。

如果您想在创建数组时按原样使用这些值,那么如评论中所述,您将删除引号:

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

调用thisComp.layer("Body Text")并将thisComp.layer("Header")它们的返回值存储在数组中。

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

  • 如果它总是thisComp.layer(...),则仅将字符串"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 = [
          thisComp.layer.bind(thisComp, "Body Text"),
          thisComp.layer.bind(thisComp, "Header")
      ];
      // ...
      a = myArray[selector]();
      aRect = a.sourceRectAtTime(5);
      

推荐阅读