Ищите массив для строки и возвращайте индекс в AS3 - PullRequest
1 голос
/ 21 января 2012

Я хочу найти массив, чтобы увидеть, содержит ли он определенную строку, а затем получить индекс результата.

Например, если у меня было:

array[0] = "dogs";
array[1] = "cats";
array[2] = "oranges";

Iхочу иметь возможность искать "Оран" и получить 2 обратно.Есть идеи, как это сделать?

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Вы можете сделать что-то вроде этого:

function findInArray(str:String):int {
    for(var i:int = 0; i < array.length; i++){
        if(array[i] == str){
            trace("found it at index: " + i);
            return i;
        }
    }
    return -1; //If not found
}

Тогда всякий раз, когда вы хотите найти что-то, называйте это как:

findInArray("oranges"); // Returns 2

Чтобы найти часть слова, можно получить непонятные результаты для больших списков, но вы можете сделать это следующим образом:

function findInArrayPartially(str:String):int {
    for(var i:int = 0; i < array.length; i++){
        if(array[i].indexOf(str) > -1){
            trace("found it at index: " + i);
            return i;
        }
    }
    return -1; //If not found
}
1 голос
/ 16 июля 2013

Еще один способ сделать это:

var arr:Array = ["dogs", "cats", "oranges", "apples"];

function indexOfSubstring(array:Array, stringToFind:String):int
{
    var answer:int = array.indexOf(stringToFind);

    if (answer == -1)
    {
        var separator:String = "|";
        var arrayToString:String = array.join(separator);
        var indexInString:int = arrayToString.indexOf(stringToFind);

        if (indexInString != -1)
        {
            var shorterStr:String = arrayToString.substring(0, indexInString);
            answer = shorterStr.split(separator).length - 1;
        }
    }

    return answer;
}

trace(indexOfSubstring(arr, "oran")); // returns 2
trace(indexOfSubstring(arr, "les")); // returns 3
trace(indexOfSubstring(arr, "ts")); // returns 1
trace(indexOfSubstring(arr, "broom")); // returns -1
...