function(arr,o,i){
for(var j=arr.length,i=i<0?i+j<0?0:i+j:i||0;i<j&&arr[i]!=o;i++){}
return j<=i?-1:i;
}
在阅读socket.io源码的过程中发现了其数组查找元素的方法写的极为精妙。其中参数为:目标数组arr。目标元素o,开始查找的数组位置索引i。如果索引i为负数的话则代表从数组最后一个位置向前算起,直到第一个元素。
另外发现还有一个比较有意思的事情。就是在判断查找结果是否是-1的时候,源码中并非是一个简单的判断==-1.而是使用按位非(~)运算符。凡是能被转换为number类型的数据,按位非运算后改变运算符号然后减1.
因此写法可以是这样:
if(~indexOf(arr,o)){
//如果元素在数组中的话
}
如果元素不在数组的话indexOf()返回-1.对-1按位非预算后是0.