2014-11-19 4 views
-2

Я решил использовать javascript indexOf, чтобы определить, существует ли значение в списке/массиве. Это работало для меня, пока я не понял, что мне нужно найти точное совпадение .javascript indexOf - точное совпадение в списке/массиве

Вот мой пример кода:

if (['eu', 'fr-CA', 'lt', 'sv', 'zh-CN', 'zh-TW'].indexOf('fr') > -1) { 

Приведенный выше код «Матч» пт с FR-CA, который является проблемой для меня, как я должен иметь точное соответствие с FR и не соответствует fr-CA.

Я думал, что это будет прямо, но я искал SO и google и не могу найти ответ на получение точного соответствия.

+3

Подождите, что, вы уверены? –

+0

'['eu', 'fr-CA', 'lt', 'sv', 'zh-CN', 'zh-TW']. IndexOf ('fr')' дает вам '-1' –

+0

, это не возможно, и поэтому вы не можете найти anwser – Sean

ответ

8

То не так, вы можете использовать indexOf:

arr.indexOf(searchElement[, fromIndex = 0])

indexOf сравнивает searchElement с элементами Array с помощью строгого равенства (тот же метод, используемый ===, или тройной, оператор)

Так ['eu', 'fr-CA', 'lt', 'sv', 'zh-CN', 'zh-TW'].indexOf('fr') возвращает -1.

+0

OMG! Ты прав. Это яркий пример того, почему я не могу выжить в течение 2 часов сна в день. Я дуф. – user1261774

1

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

var match = ['eu', 'fr-CA', 'lt', 'sv', 'zh-CN', 'zh-TW'].filter(function(item){ 
    return item === 'eu'; 
}); 

console.log(match); // an array of matches, only one item in this case 

Хотя ваш может должно работать нормально. Возможно, вы пропустили что-то еще?

http://jsfiddle.net/ydm7k6xm/

+0

Вы в основном реализовали '.indexOf() 'прямо здесь: P –

+0

@ Ja͢ck Хе-хе, ну и более дорогая версия, производительность ... – filur

2

Вы можете использовать метод some. Это остановит поиск после того, как первый матч будет найден, или возвращает ложь, если ничего не соответствует:

var arr = ['eu', 'fr-CA', 'lt', 'sv', 'zh-CN', 'zh-TW']; 
 
var match = arr.some(function(el) { 
 
    return el === 'zh-CN'; 
 
}); 
 

 
alert(match);

Или регулярные выражения могут также использоваться. Например:

var arr = ['eu', 'fr-CA', 'lt', 'sv', 'zh-CN', 'zh-TW']; 
 
var match = new RegExp('^' + arr.join('|') + '$').test('zh-CN'); 
 

 
alert(match);

2

indexOf при сравнении значения массива равно тому же значение в массиве. то только он возвращает true, иначе он всегда возвращает false, если вы хотите найти подстроку в значении массива, используйте эту функцию ниже. это поиск подстроки в массиве и возвращает позицию в массиве

function searchStringInArray (str, strArray) { 
    for (var j=0; j<strArray.length; j++) { 
     if (strArray[j].match(str)) return j; 
    } 
    return -1; 
} 

var res = searchStringInArray('fr',['eu', 'fr-CA', 'lt', 'sv', 'zh-CN', 'zh-TW']); 

alert(res); 

FIDDLE

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