替代jquery .inarray?

时间:2011-02-22 07:42:56

标签: javascript jquery arrays

我喜欢inarray,搜索没有循环的数组,但它只进行精确/精确匹配,如果我使用.match,我可以进行部分匹配,但这需要循环。

有没有办法在没有循环的情况下搜索数组进行部分匹配?

如果在第一个中找到部分或全部匹配,则有2个数组,1个要搜索,第2个替换文本/值。

目标是以最快的方式搜索数组以进行部分或完全匹配。

有什么建议吗?

2 个答案:

答案 0 :(得分:10)

好吧,如果.inArray()不可用,Array.prototype.indexOf()当然会在数组上循环:

<强>段

inArray: function( elem, array ) {
    if ( array.indexOf ) {
        return array.indexOf( elem );
    }

    for ( var i = 0, length = array.length; i < length; i++ ) {
        if ( array[ i ] === elem ) {
            return i;
        }
    }

    return -1;
},

<强>段

如果您只想知道数组是否包含某个条目,您可能只想.join()并使用String.prototype.indexOf()

这当然不能再返回索引了。所以你需要编写自己的逻辑。可以通过修改上面的代码轻松完成。例如:

Array.prototype.ourIndexOf = function(v) {
    for ( var i = 0, length = this.length; i < length; i++ ) {
       if ( typeof this[i] === 'string' && this[i].indexOf(v) > -1 ) {
            return i;
       }
    }
    return -1;
};

['Foobar', 'baseball', 'test123'].ourIndexOf('base') // === 1

答案 1 :(得分:1)

根据您要执行的操作,您可能会发现一些有用的Underscore函数:

  1. detect(返回符合条件的第一个元素)
  2. select(返回所有匹配的元素)
  3. any(如果任何元素匹配则返回true)
  4. each(迭代元素)
  5. map(将数组转换为新数组)
  6. 您可能会发现其他一些有用的功能。