我运行some tests,数据指出jQuery inArray()
比简单循环慢得多。
并且array.indexOf()
甚至没有参加测试,因为我以前做过其他测试,而且表现更差。
必须有充分的理由不使用它:
for(var i=0,len=arr.length,rtn=-1;i<len;i++){
if(arr[i]==="arritem"){
rtn=i;
break;
}
}
答案 0 :(得分:5)
如果你要测试jQuery的inArray
,实际测试jQuery的inArray
,并比较苹果和苹果(调用函数来调用函数 - 你可以在性能的地方内联写入循环是非常至关重要,但这不是你的默认行动,大概是):http://jsperf.com/inarraytest/3
准备HTML:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
准备代码:
var arr=[0,1,2,3,4,5,6,7,8,9];
function arrayLoop(elem, array, i) {
var len = array.length;
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
for ( ; i < len; i++ ) {
// Skip accessing in sparse arrays
if ( i in array && array[ i ] === elem ) {
return i;
}
}
return -1;
}
试验:
// jQuery.inArray last
var rtn=jQuery.inArray(9,arr);
// arrayLoop last
var rtn = arrayLoop(9,arr);
// jQuery.inArray middle
var rtn=jQuery.inArray(4,arr);
// arrayLoop middle
var rtn = arrayLoop(4,arr);
// jQuery.inArray first
var rtn=jQuery.inArray(0,arr);
// arrayLoop first
var rtn = arrayLoop(0,arr);
Chrome上的结果(indexOf
)jQuery.inArray
总是比arrayLoop
快(在第一对测试用例中,我们正在搜索最后一个条目, 戏剧性地所以。)
IE6上的结果(没有indexOf
):jQuery.inArray
总是比arrayLoop
快,但不足为奇(因为它必须做同样的工作) - 奇怪的是,在我们在数组中搜索第一个条目的情况下,在这种情况下它会更快。
答案 1 :(得分:3)
你正在做的只是同一个jQuery $ .inArray代码的一部分,当然,当你拿一段代码并单独测试这个功能时它会更快。检查在实际迭代列表之前验证的所有条件以查找元素。
这是简单循环和$ .inArray()之间的额外时间。
最后:如果你肯定知道以下内容,你可以坚持使用简单的循环,