2013-07-12 4 views
1

У меня есть массив, содержащий строку.Как проверить массив, если он содержит строку в Javascript?

var js_userBoxName = new Array(); 

Я хочу найти элементы массива, если строка содержит слово «foo», которое должно отображаться.

Так, например, в моем массиве содержатся слова {foofy, foofa, foo, awtsy}, foofy, foofa и foo, так как все они содержат слово foo.

+0

http://stackoverflow.com/questions/784012/javascript-equivalent-of-phps-in-array Помогает ли это? – Ariane

+2

Является ли она итерацией в массиве дислокации струны, с которой вы столкнулись? Что вы пробовали? – DevlshOne

+1

[Array.filter] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) –

ответ

2

Вы также можете попробовать это:

var myarray = ["foofy", "foofa", "foo", "awtsy"]; 
    var searched_string = "foo"; 
    var foundmatch = []; 

    for(i=0; i < myarray.length; i++){ 
     if(myarray[i].match(searched_string)){ 
      foundmatch.push(myarray[i]); 
     } 
    } 

    alert(foundmatch); 
+0

простейший и самый легкий из всех ответов. Благодаря! – pmark019

2

Заканчивать методом Array.filter:

var arr = ['foofy', 'foofa', 'foo', 'awtsy']; 
var fooItems = arr.filter(function (item) { 
    return item.indexOf('foo') >= 0; 
}); 

// Yields ['foofy', 'foofa', 'foo'] 

Связанная MDN страница содержит polyfill для браузеров, которые не поддерживают его. Если вам случится быть с помощью JQuery, вы можете использовать $.grep:

var arr = ['foofy', 'foofa', 'foo', 'awtsy']; 
var fooItems = $.grep(arr, function (item) { 
    return item.indexOf('foo') >= 0; 
}); 
+0

Если IE <9 необходимо поддерживать, возможно, придется использовать shim –

1

ПРИМЕЧАНИЕ: Кончик Хорошая производительность, чтобы всегда кэшировать длину вашего массива при переборе над ним, а не пересчитывая его для выполнения каждого цикла. len = js_userBoxName.length

http://jsperf.com/caching-array-length/4

function() { 
    for(var i = 0, len = js_userBoxName.length; i < len; i++){ 
     if(typeof js_userBoxName[i] === 'string'){ 
     if(js_userBoxName[i].indexOf('foo') == -1) 
      return true; 
     } 
    } 
    return false; 
} 
+0

+1 для кеширования array.length и проверки типов, вы также должны использовать '=== -1' при проверке возвращаемого значения indexOf – tike

+0

только что заметил === то же самое с == – pmark019

+1

Это называется« строгое равно: «в случае реальных объектов (а не простых типов, таких как строки или числа), он сравнивает« равенство экземпляра »(т. е. является ли этот объект тем же самым объектом, что и этот объект), и считается, что некоторые из них являются лучшими. Проверьте это немного подробнее: http://www.impressivewebs.com/why-use-triple-equals-javascipt/ –

0

Следующая должно работать:

var myArray = ['foofy', 'foofa', 'foo', 'awtsy']; 

for (var i = 0; i < myArray.length; i++) { 
    if (myArray[i].contains('foo')) 
    console.log(myArray[i]); 
} 

принты: foofy Foofa Foo

Примечание: "awtsy" не содержат шаблон Foo

+0

Совет: http://stackoverflow.com/a/17499001/1850609 – acdcjunior

+0

спасибо! Мое изменение должно выглядеть лучше! –

+0

Теперь это выглядит хорошо! +1! – acdcjunior

2

Следующая функция должна сделать трюк, он использует только стандартные элементы акме сценария

function Find (myarray, searchterm){ 
    for (var i=0, len = myarray.length; i<len; i += 1){ 
     if (typeof(myarray[i]) === 'string' && myarray[i].search(searchterm) !== -1){ 
      // print or whatever 
      //hint use a callback here that you pass in as an additional arugment 
     } 
    } 
} 

с помощью поиска позволяет использовать регулярные выражения, если вам нужно проверить что-то более сложное

Смежные вопросы