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

Posted

技术标签:

【中文标题】如何在数组jQuery中查找字符串的一部分【英文标题】:How to find part of a string in array jQuery 【发布时间】:2013-12-19 07:27:45 【问题描述】:

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

我有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");
        

谢谢 努诺

【问题讨论】:

循环数组并在每个字符串上使用indexOf How can I check if one string contains another substring in javascript? 的可能重复项 您不想检查该值是否在数组中。您想检查该值是否在数组值之一中。 可以使用JavaScript搜索功能msdn.microsoft.com/en-us/library/ie/tbc7a78k(v=vs.94).aspx 【参考方案1】:

我不确定你是否熟悉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

【讨论】:

更新了 jQuery fiddle 以在找到字符串时停止 试过哪一种,下划线还是jQuery?什么不起作用? 是的,第二个有效,但我需要它来找到部分结果,如果用户输入“BA11HB”则返回 true,并且它将部分对应于数组中的以下条目:“BA11”。 你可以使用join('SEPERATOR')(例如array1.join('|'))来解决这个问题。第一个解决方案是防弹的(选择正确的分隔符没有麻烦)。【参考方案2】:

试试这样的

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

如果逗号有问题

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

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

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

【讨论】:

一个不错的方法,但是如果他搜索345,7,就会在array1中找到。 任何join 方法都注定失败,因为我们不知道 OPs 数据。没错,您可以用魔法字符将它们分开,希望它们不会出现。【参考方案3】:
var found = false;
$.each(array, function(i, val) 
    if (val.indexOf(string) >= 0) 
        found = true;
        return false;
    
);

【讨论】:

工作正常,+1!。在这里我准备了一点jsFiddle 来尝试一下。 N.B.:我已经封装成一个方便的函数。 @Maurice 是不是 string.indexOf(val),因为 val 总是相同的长度,并且字符串长度可以是可变的,并且 val 可以是字符串的一部分,而不是相反.【参考方案4】:

您可以创建一个简单的函数并将其添加到 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') );

【讨论】:

如果您在扩展原生 JS 对象时遇到问题:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…,您可以将函数定义为“普通”函数并按以下方式调用:containsSubString.call(array1,"234"); 嗨,谢谢你的回答,但是如果用户输入一个值,例如“AB11HB”,并且我的数组上有一个我希望匹配的条目,例如“AB11”,它将返回假的。 这不是您在原始帖子中所要求的,而且您的示例都不是那样的。 添加了编辑 - 如果这不能满足您的要求,请明确说明您的要求,并提供一组体面的测试数据和通过/失败标准。 谢谢你的回答,我要求的是同样的事情。唯一的区别在于我要比较的数据。这就是我遇到麻烦的地方,因为如果我比较一个大于数组上数据的字符串,即使数组中存在部分字符串,它也会始终返回 false。【参考方案5】:

看到 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);
    );
);

【讨论】:

以上是关于如何在数组jQuery中查找字符串的一部分的主要内容,如果未能解决你的问题,请参考以下文章

在数组中查找部分字符串

按名称 Jquery 数组查找 id [重复]

jquery如何输出数组中某个特定值

如何使用 PowerShell 处理数组以查找特定字符串?

如何在 Scala 中向数组添加元素并查找变量类型?

如何使用 php 函数在数组中查找项目及其后的项目