javascript indexOf - 列表/数组中的完全匹配

时间:2014-11-19 06:22:34

标签: javascript jquery arrays list

我决定使用javascript indexOf来确定列表/数组中是否存在值。这对我有用,直到我意识到我需要在列表中找到完全匹配。

这是我的示例代码:

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

以上代码将'fr'与fr-CA“匹配”,这对我来说是一个问题,因为我必须与fr 完全匹配,并且与fr-CA不匹配。

我认为这是直截了当的,但我搜索了SO和谷歌,但找不到完全匹配的答案。

4 个答案:

答案 0 :(得分:10)

这是错误的,您可以使用indexOf

  

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

     

indexOf使用strict将searchElementArray的元素进行比较   相等(===使用的相同方法,或三重等于运算符)

因此['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

虽然你的能力应该可以正常工作。也许你错过了别的什么?

http://jsfiddle.net/ydm7k6xm/

答案 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);

FIDDLE