我决定使用javascript indexOf来确定列表/数组中是否存在值。这对我有用,直到我意识到我需要在列表中找到完全匹配。
这是我的示例代码:
if (['eu', 'fr-CA', 'lt', 'sv', 'zh-CN', 'zh-TW'].indexOf('fr') > -1) {
以上代码将'fr'与fr-CA“匹配”,这对我来说是一个问题,因为我必须与fr 完全匹配,并且与fr-CA不匹配。
我认为这是直截了当的,但我搜索了SO和谷歌,但找不到完全匹配的答案。
答案 0 :(得分:10)
这是错误的,您可以使用indexOf
:
arr.indexOf(searchElement[, fromIndex = 0])
indexOf
使用strict将searchElement
与Array
的元素进行比较 相等(===
使用的相同方法,或三重等于运算符)
因此['eu', 'fr-CA', 'lt', 'sv', 'zh-CN', 'zh-TW'].indexOf('fr')
会返回-1
。
答案 1 :(得分:2)
试试这个:
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
虽然你的能力应该可以正常工作。也许你错过了别的什么?
答案 2 :(得分:2)
您可以使用some
方法。一旦找到第一个匹配项,它将停止搜索,如果没有匹配则返回false:
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);

答案 3 :(得分: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);