2013-12-11 2 views
3

Я пытаюсь выполнить простой IndexOf на моем массиве Дело в том, что он просто ищет весь текст в моем узле массиваСтрока IndexOf в Сентанс массива

var arr = new Array(); 
arr.push("hello world"); 
var result = arr.indexOf("hello"); 

моя проблема, что результат я получаю -1 есть ли способ получить indexOf для поиска внутри каждого элемента массива без другого цикла?

благодаря

+0

Проверьте мой обновленный ответ. – Adil

ответ

8

Нет, его невозможно использовать arr.indexOf для поиска подстроки, вы должны использовать цикл.

Хотя вы можете добавить метод к массиву, чтобы вызвать его, чтобы найти подстроку в массиве.

Live Demo

Определение функции.

arr.containsIndexOf = function(str) { 
    for(var i = 0; i < arr.length; i++){ 
    if(arr[i].indexOf(str) != -1) 
     return i; 
    } 
    return -1; 
} 

Вызов функции

arr.containsIndexOf("hello") 
+4

Не знаете, почему это было приостановлено? Он отвечает на вопрос. –

+1

выглядит как кто-то, забитый ошибкой, а затем поддержанный. – bansi

0

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

var arr = new Array(); 
arr.push("hello world"); 
var result = arr[0].indexOf("hello"); 

Поскольку это массив, так что вам нужно, чтобы получить доступ к нему с его индексом.

0

Вы вставляете всю строку hello world в один индекс массива, поэтому indexOf будет работать только тогда, когда вы будете использовать его, чтобы он соответствовал всему элементу в этом индексе массива.

var result = arr.indexOf("hello world");

Один из способов сделать это было бы так:

var arr = new Array(); 
arr.push("hello world"); 

for(var i = 0; i < arr.length; i++){ 
    if(arr[i].indexOf('hello') != -1) 
     return i; 
} 

Смотреть это jsfiddle

1

Как Адиль сказал, что вы должны использовать цикл.

var myArr= new Array(); 
myArr.push("hello world"); 
function searchArr(txt, arr) { 
    for (var i = 0; i < arr.length; i++) { 
     if (arr[i].toLowerCase().indexOf(txt.toLowerCase()) > -1) { 
      return i 
     } 
    } 
} 

использовать эту функцию, как этот

searchArr("hello",myArr); //returns 0 

Вы можете иметь массив с несколькими «привет», так что вы должны знать, где все из них.

myArr.push("hello world") 
myArr.push("hello Pluto"); 
myArr.push("hi sun"); 
myArr.push("Hello Moon"); 
function searchArr(txt, arr) { 
var arrList = new Array(); 
    for (var i = 0; i < arr.length; i++) { 
     if (arr[i].toLowerCase().indexOf(txt.toLowerCase()) > -1) { 
      arrList.push(i); 
     } 
    } 
return arrList 
} 
searchArr("hello",myArr); //returns [0, 1, 3] 
+0

Вам может понравиться вернуть -1 в вашей первой функции (более простой), если элемент поиска не найден в массиве. –

1

Как сказал @Adil, Нет, вы не можете использовать indexOf функцию Array найти подстроку, но вы можете использовать indexOf из String найти подстроку:

Пример:

var mystr = 'hello world'; 
var index = mystr.indexOf('hello'); 

В вашем примере вы должны попробовать что-то вроде:

var arr = new Array(); 
arr.push("hello world"); 
var mystr = arr[0]; // this is String object 
var index = mystr.indexOf("hello"); 

Документация:
string.indexOf
array.indexOf

0
// Get index of the first matching item in an array 
// or -1 if the item is not found 
function SearchArray(arr, txt) { 
    for (var i = 0; i < arr.length; i++) { 
     if (arr[i].indexOf(txt) > -1) { 
      return i; 
     } 
    } 
    return -1; 
} 

Вызов функции:

var someArray = new Array(); 
someArray.push("hello world"); 

SearchArray(someArray, "hello"); 
Смежные вопросы