jquery数组封装使用方法分享(jquery数组遍历)


Posted in Javascript onMarch 25, 2014

$.each(array, [callback]) 遍历

不同于例遍 jQuery 对象的 $.each() 方法,此方法可用于例遍任何对象(不仅仅是数组哦~). 回调函数拥有两个参数:第一个为对象的成员或数组的索引, 第二个为对应变量或内容. 如果需要退出 each 循环可使回调函数返回 false, 其它返回值将被忽略.

each遍历,相信都不陌生,在平常的事件处理中,是for循环的变体,但比for循环强大.在数组中,它可以轻松的攻取数组索引及对应的值.例:

使用方法如下:

var arr = ['javascript', 'php', 'java', 'c++', 'c#', 'perl', 'vb', 'html', 'css', 'objective-c'];
$.each(arr, function(key, val) {
 // firebug console
 console.log('index in arr:' + key + ", corresponding value:" + val);
 // 如果想退出循环
 // return false;
});

再来个测试程序:
[/code]
 var fruit = ['苹果','香蕉','橙子','哈密瓜','芒果'];
 //用原生getElementsByTagName获取h2元素的对象集合
 var h2obj=document.getElementsByTagName('h2');

 //$.each()遍历数组
 $('input#js_each').click(function(){
  $.each(fruit,function(key,val){
   //回调函数有两个参数,第一个是元素索引,第二个为当前值
   alert('fruit数组中,索引:'+key+'对应的值为:'+val);
  });
 });

[/code]
相对于原生的for..in,each更强壮一点. for..in也可以遍历数组,并返回对应索引,但值是需要通过arrName[key]来获取;

$.grep(array, callback, [invert])过滤

使用过滤函数过滤数组元素.此函数至少传递两个参数(第三个参数为true或false,对过滤函数返回值取反,个人觉得用处不大): 待过滤数组和过滤函数. 过滤函数必须返回 true 以保留元素或 false 以删除元素. 另外,过滤函数还可以是可设置为一个字条串(个人不推荐,欲了解自行查阅);

v[code]ar temp = [];
temp = $.grep(arr, function(val, key) {
 if(val.indexOf('c') != -1) 
  return true;
 // 如果[invert]参数不给或为false, $.grep只收集回调函数返回true的数组元素
 // 反之[invert]参数为true, $.grep收集回调函数返回false的数组元素
}, false);
console.dir(temp);

再来个测试程序:

 //$.grep()过滤数组
 $('input#js_grep').click(function(){
  $.grep(fruit,function(val,key){
   //过滤函数有两个参数,第一个为当前元素,第二个为元素索引
   if(val=='芒果'){
    alert('数组值为 芒果 的下标是: '+key);
   }
  });  var _moziGt1=$.grep(fruit,function(val,key){
   return key>1;
  });
  alert('fruit数组中索引值大于1的元素为: '+_moziGt1);
  var _moziLt1=$.grep(fruit,function(val,key){
   return key>1;
  },true);
  //此处传入了第三个可靠参数,对过滤函数中的返回值取反
  alert('fruit数组中索引值小于等于1的元素为: '+_moziLt1);
 });

$.map(array,[callback])按给定条件转换数组

作为参数的转换函数会为每个数组元素调用, 而且会给这个转换函数传递一个表示被转换的元素作为参数. 转换函数可以返回转换后的值、null(删除数组中的项目)或一个包含值的数组, 并扩展至原始数组中.这个是个很强大的方法,但并不常用. 它可以根据特定条件,更新数组元素值,或根据原值扩展一个新的副本元素.

//1.6之前的版本只支持数组
temp = $.map(arr, function(val, key) {
 //返回null,返回的数组长度减1
 if(val === 'vb') return null;
 return val;
});
console.dir(temp);
//1.6开始支持json格式的object
var obj = {key1: 'val1', key2: 'val2', key3: 'val3'};
temp = $.map(obj, function(val, key) {
 return val;
});
console.dir(temp);

再来个测试程序:

 //$.map()按给定条件转换数组
 $('input#js_map').click(function(){
  var _mapArrA=$.map(fruit,function(val){
   return val+'[新加]';
  });
  var _mapArrB=$.map(fruit,function(val){
   return val=='苹果' ? '[只给苹果加]'+val : val;
  });
  var _mapArrC=$.map(fruit,function(val){
   //为数组元素扩展一个新元素
   return [val,(val+'[扩展]')];
  });
  alert('在每个元素后面加\'[新加]\'字符后的数组为: '+ _mapArrA);
  alert('只给元素 苹果 添加字符后的数组为: '+ _mapArrB);
  alert('为原数组中每个元素,扩展一个添加字符\'[新加]\'的元素,返回的数组为 '+_mapArrC);
 });

$.inArray(val,array)判断值是否存在于数组中

确定第一个参数在数组中的位置, 从0开始计数(如果没有找到则返回 -1 ).记得indexOf()方法了吗? indexOf()返回字符串的首次出现位置,而$.inArray()返回的是传入参数在数组中的位置,同样的,如果找到的,返回的是一个大于或等于0的值,若未找到则返回-1.现在, 知道怎么用了吧. 有了它, 判断某个值是否存在于数组中,就变得轻而易举了.

//返回元素在数组中的位置,0为起始位置,返回-1则未找到该元素
console.log($.inArray('javascript', arr));

测试程序:
[code]
 //$.inArray判断值是否在数组中,不存在返回-1,存在则返回对应索引值
 $('input#js_inarray').click(function(){
  var _exist=$.inArray('芒果',fruit);
  var _inexistence=$.inArray('榴莲',fruit)
  if(_exist>=0){
   alert('芒果 存在于数组fruit中,其在数组中索引值是: '+_exist);
  }
  if(_inexistence< 0){
   alert('榴莲 不存在于数组fruit中!,返回值为: '+_inexistence+'!');
  }
 });

$.merge(first,second)合并两个数组

返回的结果会修改第一个数组的内容——第一个数组的元素后面跟着第二个数组的元素. 这个方法是用jQuery的方法替代原生concat()方法, 但功能并没有concat()强大, concat()可以同时合并多个数组.

var frontEnd = ['javascript', 'css', 'html'],
   backEnd = ['java', 'php', 'c++'];
// 这种方式会修改第一个参数, 即frontEnd数组
temp = $.merge(frontEnd, backEnd);
console.dir(temp);
console.dir(frontEnd);
// 可以用下面的方式来避免对原数组的影响
// $.merge($.merge([], frontEnd), backEnd);

测试程序

 //$.merge()合并两个数组
 $('input#js_merge').click(function(){
  //原生concat()可能比它还简洁点
  fruitNew=$.merge(fruit,['水蜜桃','火龙果','西瓜','杨桃','荔枝','龙眼'])
  alert('合并后新数组长度为: '+fruitNew.length+'. 其值为: '+fruitNew);
 });

$.unique(array)过滤数组中重复元素

删除数组中重复元素. 只处理删除DOM元素数组,而不能处理字符串或者数字数组.第一次看到这个方法,觉得这是个很便捷的方法, 可以过滤重复, 哈, 多完美, 但仔细一看, 仅限处理DOM元素. 功能8折了.所以, 我给它定义成了一个不常用的元素, 至少, 我用jQuery以来没用到过它.

<div>blahblahblah....</div>
<div></div>
<div class="dup"></div>
<div class="dup"></div>
<div class="dup"></div>
<div></div>
// $.unique只支持DOM元素数组,去除重复DOM元素,不支持其他类型数组(String或者Number)
// 获得原始的DOM数组,而不是jQuery封装的
var divs = $('div').get(); 
// 增加几个class为dup的div
divs = divs.concat($('div.dup').get()); 
console.log("before unique:" + divs.length);
divs = $.unique(divs);
console.log("after unique:" + divs.length);

测试程序:

 //$.unique()过滤数组中重复元素(仅限DOM元素数组)
 $('input#js_unique').click(function(){
  var _h2Arr=$.makeArray(h2obj);
  //将数组_h2Arr重复一次
  _h2Arr=$.merge(_h2Arr,_h2Arr);
  var _curLen=_h2Arr.length;
  _h2Arr=$.unique(_h2Arr);
  var _newLen=_h2Arr.length;
  alert('数组_h2Arr原长度值为: '+_curLen+' ,过滤后为: '+_newLen+' .共过滤 '+(_curLen-_newLen)+'个重复元素');
 });

$.makeArray(obj) 将类数组对象转换为数组

将类数组对象转换为数组对象, 类数组对象有 length 属性,其成员索引为0至 length-1.这是个多余的方法, 无所不能的$本来就包含了这个功能. jQuery官网上解释的非常模糊. 其实, 它就是将某个类数组对象(比如用getElementsByTagName获取的元素对象集合)转换成数组对象.

首先什么是类数组对象?jQuery官网上用divs = getElementsByTag('div')来做例子,这个divs有类似数组的一些方法比如length,通过[index]方式获取元素等,然后通过$.makeArray(divs)使它转为数组,就可以用数组的其他功能,比如reverse(), pop()等。

 //$.makeArr()类数组转换
 $('input#js_makearray').click(function(){
  var _makeArr=$.makeArray(h2obj);
  alert('h2元素对象集合的数据类型转换为: '+_makeArr.constructor.name);
 });

$(dom).toArray()将所有DOM元素恢复成数组

把jQuery集合中所有DOM元素恢复成一个数组;并不常用的方法, 个人甚至觉得它和$.makeArray一样多余.

 //$(dom).toArray()将所有DOM元素恢复成数组
 $('input#js_toarray').click(function(){
  var _toArr=$('h2').toArray();
  alert('h2元素集合恢复后的数据类型是: '+_toArr.constructor.name);
Javascript 相关文章推荐
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
Dec 28 Javascript
使用Javascript接收get传递的值的代码
Nov 30 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
Mar 29 Javascript
JavaScript中的Object对象学习教程
May 20 Javascript
jsonp跨域请求实现示例
Mar 13 Javascript
JS中cookie的使用及缺点讲解
May 13 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
Aug 17 Javascript
js实现掷骰子小游戏
Oct 24 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
Aug 20 Javascript
Openlayers实现图形绘制
Sep 28 Javascript
vue项目实现分页效果
Mar 24 Vue.js
如何用Node.js编写内存效率高的应用程序
Apr 30 Javascript
jquery选择器原理介绍($()使用方法)
Mar 25 #Javascript
Jquery插件编写简明教程
Mar 25 #Javascript
jquery自动填充勾选框即把勾选框打上true
Mar 24 #Javascript
jquery默认校验规则整理
Mar 24 #Javascript
Javascript连接多个数组不用concat来解决
Mar 24 #Javascript
jqeury-easyui-layout问题解决方法
Mar 24 #Javascript
让table变成exls的示例代码
Mar 24 #Javascript
You might like
一个PHP数组应该有多大的分析
2009/07/30 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
浅谈php调用python文件
2019/03/29 PHP
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
js中url对象化管理分析
2017/12/29 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
Python判断字符串与大小写转换
2015/06/08 Python
在Python的Django框架中显示对象子集的方法
2015/07/21 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
Python使用sorted排序的方法小结
2017/07/28 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
护士辞职信模板
2014/01/20 职场文书
诉讼授权委托书
2014/10/15 职场文书
高考升学宴主持词
2019/06/21 职场文书
Python爬取某拍短视频
2021/06/11 Python
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP