Сложность возврата массива индексов каждого элемента из массива, соответствующего поисковому запросу - PullRequest
0 голосов
/ 13 ноября 2011

Привет. Я действительно изо всех сил пытаюсь создать код для функции, которая «возвращает массив индексов из уже заполненного массива, содержащего строки, когда он соответствует поисковому запросу».Поэтому, если поисковый термин соответствует слову или символам в элементе массива независимо от его порядка, он должен возвращать индексы, в которых эти слова присутствуют в массиве.Не используется функция jquery grep.Вот некоторый код, чтобы проиллюстрировать, что я имею в виду.

array_test = ["Today was hot","Tomorrow will be hot aswell", "Yesterday the weather was not so good","o1234 t12345"]

function locateSearch(array_test,searchTerm){ 
var myArray = [];

for(i=0;i<array_test.length;i++){ 
if(...) // what should i be testing here, this is where i have been going wrong... 

myArray[myArray.length] = i; 
} 
 return myArray;  
}

document.write(locateSearch,'ot') //this should return indexes [0,1,2,3]

Извините, если я не объяснил это так хорошо, благодарю вас за помощь.Спасибо.

Ответы [ 4 ]

0 голосов
/ 13 ноября 2011

если вам нужно, чтобы ваш тест не учитывал регистр, используйте метод соответствия regEx вместо indexOf ()

, так что ... if(array[i].match(/searchTerm/i) != null){ myArray.push(i) }

0 голосов
/ 13 ноября 2011
array_test = ["Today was hot","Tomorrow will be hot aswell", "Yesterday the weather was not so good","o1234 t12345"];

function locateSearch(array_test,searchTerm){
    searchTerm = searchTerm.toLowerCase();
    var myArray = [];
    for(var i = 0; i < array_test.length; i++){
        for(var j = 0; j < searchTerm.length; j++) {
            if(array_test[i].toLowerCase().indexOf(searchTerm[j]) >= 0) {
                myArray.push(i);
                break;
            }
        }
    }
    return myArray;  
}

alert(locateSearch(array_test, 'To').toString());

Также смотрите это jsfiddle .

=== ОБНОВЛЕНИЕ ===

Если каждый символ должен быть в одной строке:

array_test = ["Today was hot","Tomorrow will be hot aswell", "Yesterday the weather was not so good","o1234 t12345"];

function locateSearch(array_test,searchTerm){
    searchTerm = searchTerm.toLowerCase();
    var myArray = [];
    var bFound;
    for(var i = 0; i < array_test.length; i++){
        bFound = true;
        for(var j = 0; j < searchTerm.length; j++) {
            if(array_test[i].toLowerCase().indexOf(searchTerm[j]) == -1) {
                bFound = false;
                break;
            }
        }
        if (bFound) {
            myArray.push(i);
        }
    }
    return myArray;  
}

alert(locateSearch(array_test, 'es').toString());

Также смотрите мой обновленный jsfiddle .

0 голосов
/ 13 ноября 2011

если я правильно понял ваш вопрос ...

if(array_test[i].indexOf(searchTerm).toLowercase() != -1)
    myArray.push(i);

Вы не упомянули, чувствителен ли поиск к регистру, но, предположив, что это так, я добавил туда

0 голосов
/ 13 ноября 2011

Попробуйте это:

array_test = ["Today was hot","Tomorrow will be hot aswell", "Yesterday the weather was not so good","o1234 t12345"]

function locateSearch(array_test,searchTerm) { 
    var myArray = [];

    for(i=0;i<array_test.length;i++) { 
        if(array_test[i].indexOf(searchTerm) != -1) // what should i be testing here, this is where i have been going wrong... 

        myArray.push(i); 
    } 
    return myArray;  
}

document.write(locateSearch,'ot') //this should return indexes [0,1,2,3]

Это вернет индексы всех элементов в array_test, которые содержат поисковый термин.

...