我喜欢inarray,搜索没有循环的数组,但它只进行精确/精确匹配,如果我使用.match,我可以进行部分匹配,但这需要循环。
有没有办法在没有循环的情况下搜索数组进行部分匹配?
如果在第一个中找到部分或全部匹配,则有2个数组,1个要搜索,第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函数:
detect
(返回符合条件的第一个元素)select
(返回所有匹配的元素)any
(如果任何元素匹配则返回true)each
(迭代元素)map
(将数组转换为新数组)您可能会发现其他一些有用的功能。