jQuery源码分析之$.inArray()函数
2015-10-06 14:41
501 查看
测试代码1:
测试代码2:
总结:in判断会跳过稀疏数组中的空白!
inArray源码分析:
总结:
(1)如果没有传入第三个参数,那么i为0表示从头开始查找;如果传入了第三个参数同时i<0那么取max(0,length+i),也就是和indexOf的逻辑是一样的(传入负数后加上长度还是小于0那么就从头开始查找!)
(2)JS原生的indexOf可以传入第二个参数表示开始查找的下标,如果该下标是负数那么取max(0,i+length)来表示从那里开始查找!
(3)要注意JS中的稀疏数组,在通过原生的forEach遍历的时候也会跳过其中的空格元素,所以这里的inArray方法也实现了跳过稀疏数组中元素!通过判断i in arr判断是否是用户主动设置了该元素!
//indexOf原生方法:indexOf(特定的元素,开始下标); //同时indexOf的第二个参数可以是负数,表示从倒数第几个开始,记住,此时不是看下标,而是看倒数第几个! var array = [2, 5, 9]; array.indexOf(9, -1); // 2 array.indexOf(2, -3); // 0 //如果第二个参数是负数,同时该负数加上数组长度依然小于0,那么就会搜索整个数组,也就是从0开始搜索数组总结:indexOf如果第二个参数是负数表示从倒数第几个开始查找,如果第二个参数的负数加上数组长度仍然小于0那么就会搜索整个数组!
测试代码2:
//(i in arr)判断是为了跳过稀疏数组中的元素,如果i in arr判断为假,那么直接返回false了,否则才判断arr[i]===elem // 例如 var arr = []; arr[2] = 1; // 此时 arr == [undefined, undefined, 1] // 结果是 => (0 in arr == false) (1 in arr == false) (2 in arr == true)
总结:in判断会跳过稀疏数组中的空白!
inArray源码分析:
var deletedIds = []; var indexOf = deletedIds.indexOf; inArray: function( elem, arr, i ) { var len; if ( arr ) { if ( indexOf ) { return indexOf.call( arr, elem, i ); } len = arr.length; //alert($.inArray(5,[1,2,3,5,4],-1))这里获取到的i就是4,len就是5,返回值为-1 i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { // Skip accessing in sparse arrays //这里直接跳过稀疏数组中的空白部分,进而节约时间 if ( i in arr && arr[ i ] === elem ) { return i; } } } return -1; }
总结:
(1)如果没有传入第三个参数,那么i为0表示从头开始查找;如果传入了第三个参数同时i<0那么取max(0,length+i),也就是和indexOf的逻辑是一样的(传入负数后加上长度还是小于0那么就从头开始查找!)
(2)JS原生的indexOf可以传入第二个参数表示开始查找的下标,如果该下标是负数那么取max(0,i+length)来表示从那里开始查找!
(3)要注意JS中的稀疏数组,在通过原生的forEach遍历的时候也会跳过其中的空格元素,所以这里的inArray方法也实现了跳过稀疏数组中元素!通过判断i in arr判断是否是用户主动设置了该元素!
相关文章推荐
- jquery选择器
- JQuery.lazyload的使用.
- JQuery学习心得总结
- jQuery源码分析之jQuery.eq()和jQuery.get()方法比较
- jQuery $.each用法
- 传统轮播
- 一步一步学jQuery(七)
- jQuery修改属性、css等
- jQueryBootgrid+ASP.NET MVC的入门应用
- 关于ajax的JQuery使用
- js页面滚动浮动层智能定位(jQuery)实例页面
- Jquery .each()
- 一步一步学jQuery(六)
- 路径问题,jquery小常识,ajax传值(表单),常见数据库使用
- JQuery
- jQuery UI基础----14jQuery UI Widgets-spinner(下拉框
- jQuery UI基础----13jQurey UI Widgets-slider(滑动器
- jQuery UI基础----12jQuery UI Widgets-menu(菜单
- jQuery UI基础----11jQuery UI Widgets-progressbar(进度条
- jQuery UI基础----10jQuery UI Widgets-Dialog(对话框