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中找不到数组上的变量的主要内容,如果未能解决你的问题,请参考以下文章
《Flash ActionScript 3 殿堂之路》十二 章,数组
ActionScript 3 在ActionScript 3中嵌入字体