【问题标题】:indexOf not finding the variable on the array in actionscript 3indexOf 在actionscript 3中找不到数组上的变量
【发布时间】:2018-10-11 02:54:44
【问题描述】:

此脚本将数据从文本文件完美加载到 myArrayofLines

function onLoaded(e:Event):void {
    var myArrayOfLines:Array = e.target.data.split(/\n/);
    for(var t:Object in myArrayOfLines)
  trace(t + " : " + myArrayOfLines[t]);

    trace(myArrayOfLines.indexOf("ace"));

    trace(myArrayOfLines[2]);
       }

跟踪 myArrayOfLines[2] 正确显示“ace”

但是使用 indexOf("ace") 会得到 -1 ,而它应该显示 2

帮助?

这是 Organis 的代码,但 indexOf 仍然给出 -1

var aLoader:URLLoader = new URLLoader;

aLoader.addEventListener(Event.COMPLETE, onLoaded);
aLoader.load(new URLRequest("3letterwords.txt"));

function onLoaded(e:Event):void
{
    var aLines:Array = e.target.data.split(/\n/);

    for (var i:int = 0; i < aLines.length; i++)
    {
        trace(i + " : " + aLines[i]);
    }

   trace(aLines.indexOf("ace"));

    trace(aLines[2]);
       }

【问题讨论】:

  • 仅供参考,您可以发布您的工作代码作为答案。在问题正文中发布答案并不真正适用于网站格式:\
  • 那么您为什么不直接发布工作代码作为答案,而不是将其从我的问题中删除并使其对其他人的帮助减少?
  • 我想你会想要发布它:)
  • 如果您点击我名字上方的“已编辑 XY 小时”链接,您可以看到完整的编辑历史记录,包括我回滚的修订,只需复制粘贴“工作代码”部分到 anwser。
  • 现在我被禁止提问了?我能做些什么来配得上这个?

标签: actionscript-3 flash actionscript jquery-animate adobe


【解决方案1】:

因为加载数据是异步操作,所以 onLoaded 事件处理程序在 if 块之后执行。基本上,执行顺序如下:

// 1
var myTextLoader:URLLoader = new URLLoader();

// 2
myTextLoader.addEventListener(Event.COMPLETE, onLoaded);

function onLoaded(e:Event):void
{
    // 5
    var myArrayOfLines:Array = e.target.data.split(/\n/);
    for(var t:Object in myArrayOfLines)
    trace(t + " : " + myArrayOfLines[t]);
}

// 3
myTextLoader.load(new URLRequest("3letterwords.txt"));

// 4
if ( myArrayOfLines.indexOf( word ) > -1 )
{
    // Success{

    clabelword.text = String(word) + String("good");    

}

这就是为什么在第 4 点脚本没有数据...

检查加载数据的唯一可靠方法是将 if 块放入事件处理程序或任何在事件处理程序之后执行的代码中。 p>

var aLoader:URLLoader = new URLLoader;

aLoader.addEventListener(Event.COMPLETE, onLoaded);
aLoader.load(new URLRequest("3letterwords.txt"));

function onLoaded(e:Event):void
{
    var aLines:Array = e.target.data.split(/[\r\t\s]*\n[\r\t\s\n]*/);

    for (var i:int = 0; i < aLines.length; i++)
    {
        trace(i + " : <" + aLines[i] + ">");
    }

    if (aLines.indexOf(word) > -1)
    {
        clabelword.text = word + "good";
    }
}

【讨论】:

  • 非常感谢您的回答,我已经通过移动代码修复了错误。但现在函数 onLoaded(e:Event):void { var myArrayOfLines:Array = e.target.data.split (/\n/); for(var t:myArrayOfLines 中的对象) trace(t + " : " + myArrayOfLines[t]);跟踪(myArrayOfLines.indexOf(“王牌”));跟踪(myArrayOfLines[2]);上面的代码正确显示“王牌”,但当我搜索“王牌”它的结果是 -1
  • 我更新了我的问题,以便更容易理解。
  • 我使用了你的代码,仍然正确地为数组 [2] 显示“ace”,但在使用 indexOf 时显示 -1
  • @MichaelRize 检查您的array[2] 是否实际上是“ace”而不是“ace”(又名长度和字节)。
  • @MichaelRize 现在这在很大程度上取决于您的数据和拆分的结果。例如,如果该文件中的 newline 不只是 \n 而是 \r\n,则您得到的结果是可能的,或者有多余的空格。我已经在我的答案中更新了 RegEx (虽然没有检查),所以如果其中有 \n ,它会被任何空白块分割,我认为这将有效地修剪结果行。
猜你喜欢
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
相关资源
最近更新 更多