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

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 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);

            }

        }

    }

});

}();

原文:http://www.cnblogs.com/snandy/archive/2011/03/02/1968557.html

时间: 2024-10-06 19:51:59

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

javascript004_ECMA5数组新特性

•对于ECMAscript5这个版本的Array新特性补充: –位置方法:indexOf      lastIndexOf –迭代方法:every  filter   forEach   some    map –缩小方法:reduce    reduceRight <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <

JavaScript_ECMA5数组新特性

var arr = [ 1, 2, 3, 4, 5, 4, 3, 2, 1 ]; 新加位置的方法: indexOf lastIndexOf1.1个参数的时候表示传值 返回索引位置(index从0开始)var index = arr.indexOf(4);alert(index); //3 2. 2个参数的时候 第一个参数表示起始位置 第二个参数还是值 var index = arr.indexOf(4,4);alert(index); //5 3.他们查找数组比较的时候 '==='  lastI

[Android 新特性] 谷歌发布Android Studio开发工具1.0正式版(组图) 2014-12-09 09:35:40

Android Studio是谷歌于13年I/O大会推出的Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的Android开发工具用于开发和调试. 今日谷歌发布了Android studio的1.0正式版,增加了包括智能代码编辑,用户界面设计工具,性能分析工具等新功能,支持Android 5.0平台的开发. 谷歌也将推荐开发环境从Eclipse IDE调整为Android studio,还为Eclipse开发者提供了

jquery源码之工具方法

jQuery 作为时下前端的"霸主".它的强大已毋庸置疑.简洁,效率,优雅,易用等优点让人很容易对它珍爱有加. 作为js的小菜,为了提升自我等级,根据各大神博客精辟的解析,硬啃了jQuery源码.在此,并不是要解析啥源码啥的(也没到那个级别哈),读书笔记,仅此而已. 所谓磨刀不误砍柴功,jQuery在大展神通之前也做了许多准备工作.比如说他的一些工具方法: 首当其冲的是他的继承扩展方法: jQuery.extend 其实也不是传统意义的继承,说mixin可能更恰当一些. // 首先看看

jQuery晦涩的底层工具方法们

这里整理的是jQuery源码中一些比较晦涩难懂的.内部的.最底层的工具方法,它们多为jQuery的上层api方法服务,目前包括: jQuery.access jQuery.access: function( elems, fn, key, value, chainable, emptyGet, pass ) 在jQuery的众多api方法中,许多方法都有一个非常重要和常见的特征:重载,简单来讲即参数的不同决定了方法的功能不同 例如我们最常使用的几个:jQuery.fn.val().jQuery.

JavaScript数组新特性

1 <!DOCTYPE html> 2 2 <html lang="en"> 3 3 <head> 4 4 <meta charset="UTF-8"> 5 5 <title>test1</title> 6 6 <script> 7 7 8 94 9 95 /* 10 96 11 97 every,some 前者是遍历数组中的每一个元素,并执行函数运行,如果有一个返回false则返回

es6数组新特性

数组循环属性:for,map,filter,foreach 结论:除了for,其他都不能通过return false,终止循环 代码 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalabl

JDK新特性之可变个数的形参的方法

可变个数的形参的方法:1.格式:对于方法的形参来说:数据类型...形参名2.可变个数的形参的方法与同名的方法之间可以构成重载3.可变个数的形参在调用时,个数从0开始,到无穷都可以(在调用这个方法时,sayHello后的括号里输入几个值都可以,可以输入0个也可以无穷个)4.使用可变多个形参的方法与方法的形参使用数组是一致的甚至是一个方法,使用要不同的名称5.若方法中存在可变个数的形参,那么一定要声明在方法形参之后(如代码中的sayHello(int i,String... args)中的int是方

Java8新特性代码示例(附注释)- 方法引用,Optional, Stream

/** * java8中的函数式接口,java中规定:函数式接口必须只有一个抽象方法,可以有多个非抽象方法,同时,如果继承实现了 * Object中的方法,那么也是合法的 * <p> * 函数式接口可以使用lambda来创建 */ @FunctionalInterface interface MyService { void sayMessage(String msg); @Override boolean equals(Object obj); } /** * 入口 * @param arg