indexOf 在actionscript 3中找不到数组上的变量

Posted

技术标签:

【中文标题】indexOf 在actionscript 3中找不到数组上的变量【英文标题】:indexOf not finding the variable on the array in 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。 现在我被禁止提问了?我能做些什么来配得上这个? 【参考方案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 ,它会被任何空白块分割,我认为这将有效地修剪结果行。

以上是关于indexOf 在actionscript 3中找不到数组上的变量的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript:从另一个类的函数中找不到变量

as3.0 在数组中找个找个,并且替换

《Flash ActionScript 3 殿堂之路》十二 章,数组

ActionScript 3 在ActionScript 3中嵌入字体

ActionScript 3 在Actionscript中绘制缩放对象

ActionScript 3 在ActionScript中打开相机