JavaScript1.6数组新特性和JQuery的几个工具方法

本文深入解析了 JavaScript 1.6 引入的 Array 方法,包括 forEach、filter、map、every 和 some 方法,并提供了针对 IE6/7/8 的解决方案,确保现代浏览器和旧版浏览器都能完美支持这些方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6。这些方法已经被写进了ECMA262 V5。现代浏览器(IE9/Firefox/Safari/Chrome/Opera)都已经支持,但IE6/7/8不支持。jquery的工具方法中提供了类似的功能。


1、Array.forEach()和jquery的$().each()。在数组中的每个项上运行一个函数。类似java5增强的for循环

1 varary = [2,4,6,8];
2
3 // js1.6 Array.forEach方法
4 ary.forEach(function(i){alert(i);});
5
6 // jquery的写法
7 $(ary).each(function(){alert(this);});
8 //还可以写成这样
9 $(ary).each(function(index,item){alert(item);});//index是元素的索引,item是该元素

2、Array.filter()和jquery的$.grep()。在数组中的每个项上运行一个函数,并将函数返回真值的项作为数组返回。简单的说就是用一个条件过滤掉不符合的数组元素,剩下的符合条件的元素组合成新的数组返回。

01 varary = [2,4,6,8];
02
03 // js1.6 Array.filter()方法
04 varotherAry1 = ary.filter(function(item){returnitem>4;});
05 alert(otherAry1);//输出6,8
06
07 // jquery写法(注意和$.each的区别)
08 // 此处函数中第一个参数是数组元素自身,第二个参数是数组元素索引
09 // 而$().each方法刚好相反,作者应该统一下。
10 varotherAry2 = $.grep(ary,function(item,index){
11 returnitem>4;
12 });
13 alert(otherAry2);//输出6,8

3、Array.map()和jquery的$.map()。在数组中的每个项上运行一个函数,并将全部结果作为数组返回。这个方法非常强大,尤其是作用于DOM数组时(在abcc项目上用过,对每个查询模块DOM生成查询字符串)。简单说就是把每个数组元素运算的结果作为新数组元素(还是很拗口)。

1 varary = [2,4,6,8];
2
3 // js1.6 Array.map()方法
4 varnewAry1 = ary.map(function(item){returnitem+1;});//每个元素加1
5 alert(newAry1);//输出3,5,7,9
6
7 // jquery写法
8 varnewAry2 = $.map(ary,function(item,index){returnitem+1;});
9 alert(newAry2);//输出3,5,7,9

4、Array.every()方法。检查数组元素是否都符合某个条件,只要有一个不符合返回false,否则返回true

1 varary = [2,4,6,8,10];
2
3 alert(ary.every(function(item){returnitem>1}));//true
4 alert(ary.every(function(item){returnitem>2}));//false

5、Array.some()方法。检查数组中元素是否符合某个条件,只要有一个符合返回true,否则返回false

1 varary = [2,4,,6,8,10];
2
3 alert(ary.some(function(item){returnitem>9;}));//true
4 alert(ary.some(function(item){returnitem>10;}));//false

最后给出IE6/7/8的解决方案,让这些浏览器完美支持JS1.6的Array新方法。

01 -function(){
02
03 functionapplyIf(o, c) {
04 if(o) {
05 for(varpinc) {
06 if(o[p]===undefined) {
07 o[p] = c[p];
08 }
09 }
10 }
11 returno;
12 }
13 applyIf(Array.prototype, {
14 indexOf :function(obj, idx) {
15 varfrom = idx ==null? 0 : (idx < 0 ? Math.max(0, arr.length + idx) : idx);
16 for(vari = from, l =this.length; i < l; i++) {
17 if(iinthis&&this[i] === obj) {
18 returni;
19 }
20 }
21 return-1;
22 },
23 lastIndexOf :function(obj, idx) {
24 varlen =this.length, from = idx ==null? len - 1 : idx;
25 if(from < 0) {
26 from = Math.max(0, len + from);
27 }
28 for(vari = from; i >= 0; i--) {
29 if(iinthis&&this[i] === obj) {
30 returni;
31 }
32 }
33 return-1;
34 },
35 every :function(fn, thisObj) {
36 varl =this.length;
37 for(vari = 0; i < l; i++) {
38 if(iinthis&& !fn.call(thisObj,this[i], i,this)) {
39 returnfalse;
40 }
41 }
42 returntrue;
43 },
44 some :function(fn, thisObj) {
45 varl =this.length;
46 for(vari = 0; i < l; i++) {
47 if(iinthis&& fn.call(thisObj,this[i], i,this)) {
48 returntrue;
49 }
50 }
51 returnfalse;
52 },
53 filter :function(fn, thisObj) {
54 varl =this.length, res = [], resLength = 0;
55 for(vari = 0; i < l; i++) {
56 if(iinthis) {
57 varval =this[i];
58 if(fn.call(thisObj, val, i,this)) {
59 res[resLength++] = val;
60 }
61 }
62 }
63 returnres;
64 },
65 map :function(fn, thisObj) {
66 varl =this.length, res = [];
67 for(vari = 0; i < l; i++) {
68 if(iinthis) {
69 res[i] = fn.call(thisObj,this[i], i,this);
70 }
71 }
72 returnres;
73 },
74 forEach :function(fn, thisObj) {
75 varl =this.length;
76 for(vari = 0; i < l; i++) {
77 if(iinthis) {
78 fn.call(thisObj,this[i], i,this);
79 }
80 }
81 }
82 });
83 }();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值