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
2
3
4
5
6
7
8
9
|
var ary = [2,4,6,8]; // js1.6 Array.forEach方法 ary.forEach( function (i){alert(i);}); // jquery的写法 $(ary).each( function (){alert( this );}); //还可以写成这样 $(ary).each( function (index,item){alert(item);}); //index是元素的索引,item是该元素 |
2、Array.filter()和jquery的$.grep()。在数组中的每个项上运行一个函数,并将函数返回真值的项作为数组返回。简单的说就是用一个条件过滤掉不符合的数组元素,剩下的符合条件的元素组合成新的数组返回。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var ary = [2,4,6,8]; // js1.6 Array.filter()方法 var otherAry1 = ary.filter( function (item){ return item>4;}); alert(otherAry1); //输出6,8 // jquery写法(注意和$.each的区别) // 此处函数中第一个参数是数组元素自身,第二个参数是数组元素索引 // 而$().each方法刚好相反,作者应该统一下。 var otherAry2 = $.grep(ary, function (item,index){ return item>4; }); alert(otherAry2); //输出6,8 |
3、Array.map()和jquery的$.map()。在数组中的每个项上运行一个函数,并将全部结果作为数组返回。这个方法非常强大,尤其是作用于DOM数组时(在abcc项目上用过,对每个查询模块DOM生成查询字符串)。简单说就是把每个数组元素运算的结果作为新数组元素(还是很拗口)。
1
2
3
4
5
6
7
8
9
|
var ary = [2,4,6,8]; // js1.6 Array.map()方法 var newAry1 = ary.map( function (item){ return item+1;}); //每个元素加1 alert(newAry1); //输出3,5,7,9 // jquery写法 var newAry2 = $.map(ary, function (item,index){ return item+1;}); alert(newAry2); //输出3,5,7,9 |
4、Array.every()方法。检查数组元素是否都符合某个条件,只要有一个不符合返回false,否则返回true
1
2
3
4
|
var ary = [2,4,6,8,10]; alert(ary.every( function (item){ return item>1})); //true alert(ary.every( function (item){ return item>2})); //false |
5、Array.some()方法。检查数组中元素是否符合某个条件,只要有一个符合返回true,否则返回false
1
2
3
4
|
var ary = [2,4,,6,8,10]; alert(ary.some( function (item){ return item>9;})); //true alert(ary.some( function (item){ return item>10;})); //false |
最后给出 IE6/7/8的解决方案,让这些浏览器完美支持JS1.6的Array新方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
- function (){ function applyIf(o, c) { if (o) { for ( var p in c) { if (o[p]===undefined) { o[p] = c[p]; } } } return o; } applyIf(Array.prototype, { indexOf : function (obj, idx) { var from = idx == null ? 0 : (idx < 0 ? Math.max(0, arr.length + idx) : idx); for ( var i = from, l = this .length; i < l; i++) { if (i in this && this [i] === obj) { return i; } } return -1; }, lastIndexOf : function (obj, idx) { var len = this .length, from = idx == null ? len - 1 : idx; if (from < 0) { from = Math.max(0, len + from); } for ( var i = from; i >= 0; i--) { if (i in this && this [i] === obj) { return i; } } return -1; }, every : function (fn, thisObj) { var l = this .length; for ( var i = 0; i < l; i++) { if (i in this && !fn.call(thisObj, this [i], i, this )) { return false ; } } return true ; }, some : function (fn, thisObj) { var l = this .length; for ( var i = 0; i < l; i++) { if (i in this && fn.call(thisObj, this [i], i, this )) { return true ; } } return false ; }, filter : function (fn, thisObj) { var l = this .length, res = [], resLength = 0; for ( var i = 0; i < l; i++) { if (i in this ) { var val = this [i]; if (fn.call(thisObj, val, i, this )) { res[resLength++] = val; } } } return res; }, map : function (fn, thisObj) { var l = this .length, res = []; for ( var i = 0; i < l; i++) { if (i in this ) { res[i] = fn.call(thisObj, this [i], i, this ); } } return res; }, forEach : function (fn, thisObj) { var l = this .length; for ( var i = 0; i < l; i++) { if (i in this ) { fn.call(thisObj, this [i], i, this ); } } } }); }(); |
js中json数据简单处理(JSON.parse()和js中嵌套html)
js中json法创建对象(json里面的:相当于js里面的=)
SimpleDateFormat使用特定的解释
eclipse+webservice开发实例
android在Canvas使用drawBitmap画一幅画
SoC嵌入式软件架构设计II:没有MMU的CPU虚拟内存管理的设计和实现方法
SRM 590 DIV1
菜鸟教程工具(三)——Maven自己主动部署Tomcat
activity-alias使用
- 最新文章
-
Mybatis包分页查询java公共类
【android】WebView缓存数据收集
VC++.Net CAD编程架构
【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译
模板专业化和模板偏特样片(template specialization and partial template specialization)
HDU 5001 概率DP || 记忆化搜索
MySQL Server 5.0 下载与 安装指南[图文] (安装到非系统路径+设置root账号相应password)
几种常见模式识别算法整理和总结
DropdownList绑定的两种方法
HDU 3683 模拟&搜索
- 热门文章
-
Hibeernate中的两种分页方式
Swift编程语言学习12 ——实例方法(Instance Methods)和类型方法(Type Methods)
工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境
windows 7 SDK和DDK下载地址
php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结)
磁盘阵列
服务器负载均衡lvs(Linux Virtual Server)
服务器集群技术(备份服务器方案和均摊工作方案)(用来解决服务器挂掉问题)
nslookup详解(name server lookup)( 域名查询)
高并发解决方案--负载均衡(HTTP,DNS,反向代理服务器)(解决大流量,高并发)