zoukankan      html  css  js  c++  java
  • Javascript 数组循环遍历之forEach

    1.  js 数组循环遍历。

    数组循环变量,最先想到的就是 for(var i=0;i<count;i++)这样的方式了。

    除此之外,也可以使用较简便的forEach 方式

    2.  forEach 函数。

    Firefox 和Chrome 的Array 类型都有forEach的函数。使用如下:

    [html] view plaincopy
     
    1. <!--Add by oscar999-->  
    2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
    3. <HTML>  
    4. <HEAD>  
    5. <TITLE> New Document </TITLE>  
    6. <META NAME="Author" CONTENT="oscar999">  
    7. </HEAD>  
    8.   
    9. <BODY>  
    10. <script>  
    11. var arryAll = [];  
    12. arryAll.push(1);  
    13. arryAll.push(2);  
    14. arryAll.push(3);  
    15. arryAll.push(4);  
    16.   
    17. arryAll.forEach(function(e){  
    18.     alert(e);  
    19. })  
    20.   
    21. </script>  
    22. </BODY>  
    23. </HTML>  

    但是以上,代码在IE中却无法正常工作。

    因为IE的Array 没有这个方法

    [javascript] view plaincopy
     
    1. alert(Array.prototype.forEach);  

    执行以上这句得到的是  "undefined", 也就是说在IE 中 Array 没有forEach的方法。

    3.  让IE兼容forEach方法

    既然IE的Array 没哟forEach方法, 我们就给它手动添加这个原型方法。
    [javascript] view plaincopy
     
    1. //Array.forEach implementation for IE support..  
    2. //https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach  
    3. if (!Array.prototype.forEach) {  
    4.     Array.prototype.forEach = function(callback, thisArg) {  
    5.         var T, k;  
    6.         if (this == null) {  
    7.             throw new TypeError(" this is null or not defined");  
    8.         }  
    9.         var O = Object(this);  
    10.         var len = O.length >>> 0; // Hack to convert O.length to a UInt32  
    11.         if ({}.toString.call(callback) != "[object Function]") {  
    12.             throw new TypeError(callback + " is not a function");  
    13.         }  
    14.         if (thisArg) {  
    15.             T = thisArg;  
    16.         }  
    17.         k = 0;  
    18.         while (k < len) {  
    19.             var kValue;  
    20.             if (k in O) {  
    21.                 kValue = O[k];  
    22.                 callback.call(T, kValue, k, O);  
    23.             }  
    24.             k++;  
    25.         }  
    26.     };  
    27. }  
     

    4. 如何跳出循环?

     Js 此种状况的forEach 不能使用continue, break;  可以使用如下两种方式:
    1. if 语句控制
    2. return . (return true, false)
    return --> 类似continue 


    以下例子是取出数组中2的倍数和3的倍数的数;
    [html] view plaincopy
     
    1. <!--Add by oscar999-->  
    2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
    3. <HTML>  
    4. <HEAD>  
    5. <TITLE> New Document </TITLE>  
    6. <META NAME="Author" CONTENT="oscar999">  
    7. </HEAD>  
    8.   
    9. <BODY>  
    10. <script>  
    11. if (!Array.prototype.forEach) {  
    12.     Array.prototype.forEach = function(callback, thisArg) {  
    13.         var T, k;  
    14.         if (this == null) {  
    15.             throw new TypeError(" this is null or not defined");  
    16.         }  
    17.         var O = Object(this);  
    18.         var len = O.length >>> 0; // Hack to convert O.length to a UInt32  
    19.         if ({}.toString.call(callback) != "[object Function]") {  
    20.             throw new TypeError(callback + " is not a function");  
    21.         }  
    22.         if (thisArg) {  
    23.             T = thisArg;  
    24.         }  
    25.         k = 0;  
    26.         while (k len) {  
    27.             var kValue;  
    28.             if (k in O) {  
    29.                 kValue = O[k];  
    30.                 callback.call(T, kValue, k, O);  
    31.             }  
    32.             k++;  
    33.         }  
    34.     };  
    35. }  
    36.   
    37. var arryAll = [];  
    38. arryAll.push(1);  
    39. arryAll.push(2);  
    40. arryAll.push(3);  
    41. arryAll.push(4);  
    42. arryAll.push(5);  
    43.   
    44. var arrySpecial = [];  
    45.   
    46. arryAll.forEach(function(e){  
    47.     if(e%2==0)  
    48.     {  
    49.         arrySpecial.push(e);  
    50.     }else if(e%3==0)  
    51.     {  
    52.         arrySpecial.push(e);  
    53.     }  
    54. })  
    55.   
    56. </script>  
    57. </BODY>  
    58. </HTML>  

    使用return 达到以上效果
    [javascript] view plaincopy
     
    1. arryAll.forEach(function(e){  
    2.     if(e%2==0)  
    3.     {  
    4.         arrySpecial.push(e);  
    5.         return;  
    6.     }  
    7.     if(e%3==0)  
    8.     {      
    9.         arrySpecial.push(e);  
    10.         return;  
    11.     }  
    12. })  

    至于如何写类似break 的效果,目前尚未找到比较好的办法。

    有搜索一下,有的说return false 可以达成, 试了一下, 效果和return 和return ture 是一样的。

  • 相关阅读:
    Hadoop 2.6.0-cdh5.4.0集群环境搭建和Apache-Hive、Sqoop的安装
    Hive数据仓库笔记(三)
    Hive数据仓库笔记(二)
    Hive数据仓库笔记(一)
    HBase新的客户端接口
    Hadoop之Secondary NameNode
    hadoop2.x源码编译
    基于新浪SAE平台的微信开发
    分布式存储系统-HBASE
    编程珠玑--心得
  • 原文地址:https://www.cnblogs.com/jsmiao/p/4517473.html
Copyright © 2011-2022 走看看