如何在数组jQuery中查找字符串的一部分

时间:2013-12-03 09:52:45

标签: javascript jquery html arrays string

我一直试图在几个字符串数组中找到一个字符串的一部分而没有成功:

我有array1 ['BA11', 'BA14', 'BA15']

和array2 ['GL156', 'GL24', 'GL31']

我希望当我搜索字符串“BA11AB”,“BA15HB”或“GL156DC”的一部分时它会返回true。

以下是我一直在使用的代码,但没有成功:

if($.inArray(userinput, array1) !== -1) 
        {
            alert("Found in Array1!");
        }

if($.inArray(userinput, array2) !== -1) 
        {
            alert("Found! in Array2");
        }

由于 努诺

5 个答案:

答案 0 :(得分:4)

var found = false;
$.each(array, function(i, val) {
    if (val.indexOf(string) >= 0) {
        found = true;
        return false;
    }
});

答案 1 :(得分:4)

看到OP改变了原来的问题:http://jsfiddle.net/c4qPX/2/是两者的解决方案(如果我们搜索搜索到的键或搜索值的数组,那么算法没有什么区别) - 重点是比较什么。

var array1 = ['BA11', 'BA14', 'BA15'];
var array2 = ['GL156', 'GL24', 'GL31'];
var search = 'GL156DC';

$.each([array1, array2], function(index, value){
    $.each(value, function(key, cell){
        if (search.indexOf(cell) !== -1)
            console.log('found in array '+index, cell);
    });
});

答案 2 :(得分:2)

您可以创建一个简单的函数并将其添加到Array原型(以便可以在任何数组上调用),该函数搜索数组以查找子字符串匹配:

JSFIDDLE

Array.prototype.containsSubString = function( text ){
    for ( var i = 0; i < this.length; ++i )
    {
        if ( this[i].toString().indexOf( text ) != -1 )
            return i;
    }
    return -1;
}

然后在数组中使用它:

var array1 = ['12345', '78273', '34784'],
    array2 = ['JJJJJ', 'ABCDEF', 'FFDDFF'];

if( array1.containsSubString( 234 ) !== -1) 
{
    alert("Found in Array1!");
}

if( array2.containsSubString( 'DD' ) !== -1) 
{
    alert("Found! in Array2");
}

修改

如果要查找数组是否具有另一个字符串的子字符串,则:

JSFIDDLE

Array.prototype.hasSubStringOf = function( text ){
    for ( var i = 0; i < this.length; ++i )
    {
        if ( text.toString().indexOf( this[i].toString() ) != -1 )
            return i;
    }
    return -1;
}

var array3 = [ 'AB11' ];

if( array3.hasSubStringOf( 'AB11HA' ) !== -1) 
{
    alert("Array3 contains substring");
}

修改2

只需结合以前的两个功能:

JSFIDDLE

Array.prototype.containsSubStringOrHasSubstringOf = function( text ){
    for ( var i = 0; i < this.length; ++i )
    {
        if (    this[i].toString().indexOf( text.toString() ) != -1
             || text.toString().indexOf( this[i].toString() ) != -1 )
            return i;
    }
    return -1;
}

var testArrays = [
        ['BA11ABC', 'BAGL156DC14', 'BA15HC'],
        ['GL156DC', 'GL166DC', 'GL31BA11AB'],
        ['BA11', 'BA14', 'BA15'],
        ['GL156', 'GL24', 'GL31']
    ],
    testValues   = [ "BA11AB", "BA15HB", "GL156DC" ],
    results = [ 'Results:' ];

var test = function( str, arr ){
    var i = arr.containsSubStringOrHasSubstringOf( str );
    if ( i !== -1 )
        results.push( JSON.stringify( arr ) + ' matches ' + str + ' on ' + arr[i] );
    else
        results.push( JSON.stringify( arr ) + ' does not match ' + str );
};

for ( var i = 0; i < testArrays.length; ++i )
    for ( var j = 0; j < testValues.length; ++j )
        test( testValues[j], testArrays[i] );

alert( results.join('\n') );

答案 3 :(得分:1)

尝试这样的事情

 return array1.toString().indexOf(userinput)!=-1;

如果逗号有问题而不是

 return array1.join('|').indexOf(userinput)!=-1;

如果出现任何问题,请使用空间

return array1.join(' ').indexOf(userinput)!=-1;

答案 4 :(得分:0)

我不确定您是否熟悉underscore js,但您可以使用以下内容:

var array = ['JJJJJ', 'ABCDEF', 'FFDDFF'];
var search = "JJJ";
var found = _.some(array, function(value) {
    return value.indexOf(search)!=-1;
});

alert(found);

请参阅fiddle

看到其他人的答案,我真的很喜欢toString()答案:array.toString().indexOf(search)!=-1