String 字符串匹配算法中的奇怪行为

String 字符串匹配算法中的奇怪行为,string,flash,actionscript-3,String,Flash,Actionscript 3,我知道我的“算法”一点用处都没有,但我想我遇到了一个非常奇怪的行为 查找匹配([“笑话”,“笑话”],“笑话”);返回笑话。但是发现匹配([“笑话”、“笑话”、“笑话”]、“笑话”);返回笑话和笑话!当我单独测试jokef时,它不匹配 这是我的密码: for (var p in dataArray) { if (dataArray[p].length != matching.length) { dataArray.splic

我知道我的“算法”一点用处都没有,但我想我遇到了一个非常奇怪的行为

查找匹配([“笑话”,“笑话”],“笑话”);返回笑话。但是发现匹配([“笑话”、“笑话”、“笑话”]、“笑话”);返回笑话和笑话!当我单独测试jokef时,它不匹配

这是我的密码:

        for (var p in dataArray) {
            if (dataArray[p].length != matching.length) {
                dataArray.splice(p,1);
            }
        }
        for (var k = 0; k < matching.length; k++) {
            for (var i in dataArray) {
                if (dataArray[i].split('')[k] != matching.split('')[k]) {
                    dataArray.splice(i,1);
                }
            }
        }
        if(dataArray.length == 0){
            return null;
        } else {
            return dataArray;
        }
for(数据数组中的var p){
if(dataArray[p].length!=匹配的.length){
拼接(p,1);
}
}
for(var k=0;k
Array.splice()是一种破坏性操作,可改变数组的长度。如果在中间for循环中添加console.log语句,则可以清楚地看到这一点:

它永远不会到达“jokef”中的“f”,因为它拼接了阵列。matching.length现在为2,for条件(var k=0;k
for (var k = 0; k < matching.length; k++) {
    for (var i in dataArray) {
        console.log(dataArray, i, k, dataArray[i].split('')[k], matching.split('')[k]);
        if (dataArray[i].split('')[k] != matching.split('')[k]) {
            dataArray.splice(i,1);
        }
    }
}
["jokes", "jokeg", "jokef"] 0 0 j j
["jokes", "jokeg", "jokef"] 1 0 j j
["jokes", "jokeg", "jokef"] 2 0 j j
["jokes", "jokeg", "jokef"] 0 1 o o
["jokes", "jokeg", "jokef"] 1 1 o o
["jokes", "jokeg", "jokef"] 2 1 o o
["jokes", "jokeg", "jokef"] 0 2 k k
["jokes", "jokeg", "jokef"] 1 2 k k
["jokes", "jokeg", "jokef"] 2 2 k k
["jokes", "jokeg", "jokef"] 0 3 e e
["jokes", "jokeg", "jokef"] 1 3 e e
["jokes", "jokeg", "jokef"] 2 3 e e
["jokes", "jokeg", "jokef"] 0 4 s s
["jokes", "jokeg", "jokef"] 1 4 g s