尽管匹配,数组.indexOf返回-1

时间:2014-05-14 00:32:46

标签: arrays actionscript-3 indexof

我正在为XML文件的一部分编写灵活的搜索算法。我有完全相同的方法在其他地方完美地运作,这就是为什么这会让我感到沮丧。

以下是我的功能部分,我遇到了麻烦。

var searchResults:Array = [];
var r:Array = [];

//Other code...

var classSplit:Array = inClass.split("-");
var profs:Array = getCourseProfs(classSplit[0], classSplit[1]);
trace(searchResults + "-vs-" + profs);

for each(var si:String in searchResults)
{
    trace(si + " is at index " + profs.indexOf(si));
    trace(profs);
    if(r.indexOf(si) == -1 && profs.indexOf(si) != -1)
    {
        r.push(si);
        trace(r);
    }
}

这是特定运行的跟踪语句的输出(来自上面的代码)。

GABIOMA1,GABIOMA1-vs-GABIOMA1,MITCHKA1,GIBSOCA1
GABIOMA1 is at index -1
GABIOMA1,MITCHKA1,GIBSOCA1
GABIOMA1 is at index -1
GABIOMA1,MITCHKA1,GIBSOCA1
Final: 

如您所见,该函数在searchResults数组(字符串)中有两个结果。它们两者完全相同,因为我还没有整理出重复的搜索结果。 " GABIOMA1,GABIOMA1"

然后,我将其与数组" profs"进行比较。这三个值:" GABIOMA1,MITCHKA1,GIBSOCA1"

您可以在教授的索引0中看到匹配结果。但是,正如您从下一行所看到的那样,profs.indexOf(si)' when si`是" GABIOMA1"错误地返回" -1"。

我可以在心跳中写一个解决方法,但我需要知道为什么indexOf已决定bork。

编辑:更加充实,IF语句的另一个分支中的代码就像一个魅力......

for each(var s:String in searchResults)
{
    if(r.indexOf(s) == -1)
    {
        r.push(s);
    }
}

编辑2:这是我的工作解决方法。如您所见,所有阵列都正常工作。

for each(var si:String in searchResults)
{
    var match:Boolean = false;
    for each(var pi:String in profs)
    {
        if(si == pi)
        {
            pr.push(si);
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

鉴于您的trace(profs)返回单个字符串,您的数组包含一个字符串GABIOMA1,MITCHKA1,GIBSOCA1作为单个实体,这就是您的GABIOMA1索引返回-1的原因。您需要在getCourseProfs()中使用逗号分割,以将GABIOMA1作为单独的字符串。

更新:我已经测试了以下内容:

    var t:Array = ['GABIOMA1', 'MISCHKA1', 'GIBSOCA1'];
    trace(t);
    trace(t.indexOf('GABIOMA1'));
    var a:Array = ['MITCHKA1', 'GABIOMA1\x00'];
    for each(var si:String in a) trace(si, 'is at index', t.indexOf(si));

这给了我a的任一元素的预期结果-1,以及您的示例中预期的跟踪结果,但是,相等测试失败。请在检查searchResults之前尝试修剪indexOf()字符串。

旁注:将\x00作为字符串的第一个字符放置会产生不同的跟踪结果! trace(si, 'is at index', t.indexOf(si));导致显示空字符串代替si,如下所示:is at index -1,而trace(si + ' is at index ' + t.indexOf(si));会显示完整字符串:GABIOMA1 is at index -1。因此,仔细检查字符串是否有不可打印的符号,可能有一些隐藏的零字符,用于复制indexOf()