Javascript 数组循环遍历之forEach

1.  js 数组循环遍历。

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

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

 

2.  forEach 函数。

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

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
</HEAD>  

<BODY>
<script>
var arryAll = [];
arryAll.push(1);
arryAll.push(2);
arryAll.push(3);
arryAll.push(4);  

//匿名方式
arryAll.forEach(function(e){
    alert(e);
})  

function t1(arg){alert(arg);}
//非匿名方式
arryAll.forEach(t1,arryAll);

</script>
</BODY>
</HTML> 

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

因为IE的Array 没有这个方法

alert(Array.prototype.forEach); 

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

 

3.  让IE兼容forEach方法

既然IE的Array 没哟forEach方法, 我们就给它手动添加这个原型方法。

//Array.forEach implementation for IE support..
//https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach
if (!Array.prototype.forEach) {
    Array.prototype.forEach = function(callback, thisArg) {
        var T, k;
        if (this == null) {
            throw new TypeError(" this is null or not defined");
        }
        var O = Object(this);
        var len = O.length >>> 0; // Hack to convert O.length to a UInt32
        if ({}.toString.call(callback) != "[object Function]") {
            throw new TypeError(callback + " is not a function");
        }
        if (thisArg) {
            T = thisArg;
        }
        k = 0;
        while (k < len) {
            var kValue;
            if (k in O) {
                kValue = O[k];
                callback.call(T, kValue, k, O);
            }
            k++;
        }
    };
} 

详细介绍可以参照:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach

 

4. 如何跳出循环?

 Js 此种状况的forEach 不能使用continue, break;  可以使用如下两种方式:

1. if 语句控制

2. return 语句控制 (return true 或 return false)

其实 return  类似continue 的作用

 

 

以下例子是取出数组中2的倍数和3的倍数的数;

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
</HEAD>  

<BODY>
<script>
if (!Array.prototype.forEach) {
    Array.prototype.forEach = function(callback, thisArg) {
        var T, k;
        if (this == null) {
            throw new TypeError(" this is null or not defined");
        }
        var O = Object(this);
        var len = O.length >>> 0; // Hack to convert O.length to a UInt32
        if ({}.toString.call(callback) != "[object Function]") {
            throw new TypeError(callback + " is not a function");
        }
        if (thisArg) {
            T = thisArg;
        }
        k = 0;
        while (k < len) {
            var kValue;
            if (k in O) {
                kValue = O[k];
                callback.call(T, kValue, k, O);
            }
            k++;
        }
    };
}  

var arryAll = [];
arryAll.push(1);
arryAll.push(2);
arryAll.push(3);
arryAll.push(4);
arryAll.push(5);
arryAll.push(6);
arryAll.push(7);  

var arrySpecial = [];  

arryAll.forEach(function(e){
    if(e%2==0)
    {
        arrySpecial.push(e);
    }else if(e%3==0)
    {
        arrySpecial.push(e);
    }
})  

</script>
</BODY>
</HTML>  

使用return 达到以上效果

arryAll.forEach(function(e){
    if(e%2==0)
    {  www.2cto.com
        arrySpecial.push(e);
        return;
    }
    if(e%3==0)
    {
        arrySpecial.push(e);
        return;
    }
})  

 

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

个人的看法:不管是java还是C#语法中,forEach就是遍历所有值

有搜索一下,有的说return false 可以达成, 试了一下, return false的效果和return 是一样,也和return ture 是一样的。
下面的测试代码是我自己加上的。

var arryAll = [];
arryAll.push(1);
arryAll.push(2);
arryAll.push(3);
arryAll.push(4);
arryAll.push(5);
arryAll.push(6);
arryAll.push(7);

arryAll.forEach(function(e){
alert(e);
if(e>3)
return false;
}); 

参考:http://www.2cto.com/kf/201303/195411.html

时间: 2024-09-20 16:22:10

Javascript 数组循环遍历之forEach的相关文章

Javascript数组循环遍历之forEach详解_基础知识

1.js 数组循环遍历. 数组循环变量,最先想到的就是 for(var i=0;i<count;i++)这样的方式了. 除此之外,也可以使用较简便的forEach 方式 2.forEach函数. Firefox 和Chrome 的Array 类型都有forEach的函数.使用如下: <!--Add by oscar999--> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> &l

php对关联数组循环遍历的实现方法

 这篇文章主要介绍了php对关联数组循环遍历的实现方法,涉及php操作数组的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php对关联数组循环遍历的实现方法.分享给大家供大家参考.具体分析如下: php对于类似 ? 1 $age = array("zhangshan"=>14,"lisi"=>15,"sharejs"=>16); 这样的数组可以通过foreach的方法进行遍历,下面是详细的代码: ? 1

php对关联数组循环遍历的实现方法_php技巧

本文实例讲述了php对关联数组循环遍历的实现方法.分享给大家供大家参考.具体分析如下: php对于类似 $age = array("zhangshan"=>14,"lisi"=>15,"sharejs"=>16); 这样的数组可以通过foreach的方法进行遍历,下面是详细的代码: $age = array("zhangshan"=>14,"lisi"=>15,"sh

数组循环遍历后的结果 放入list集合中 请各位大神帮帮忙 代码怎么写呀

问题描述 数组循环遍历后的结果 放入list集合中 请各位大神帮帮忙 代码怎么写呀 //数组res for(int i = 0; i < res.length; i++){ numValue=res[i].toString(); System.out.print(res[i] + " "); } 循环遍历后怎么放入list集合中 //List list = new ArrayList(); 解决方案 public static void main(String[] args){

JavaScript数组的遍历

数组遍历与属性 虽然在 JavaScript 中数组是是对象,但是没有好的理由去使用 for in 循环 遍历数组. 相反,有一些好的理由不去使用 for in 遍历数组.     注意: JavaScript 中数组不是 关联数组.     JavaScript 中只有对象 来管理键值的对应关系.但是关联数组是保持顺序的,而对象不是. 由于 for in 循环会枚举原型链上的所有属性,唯一过滤这些属性的方式是使用hasOwnProperty 函数, 因此会比普通的 for 循环慢上好多倍. 遍

js数组循环遍历数组内所有元素的方法

 在js中数组遍历最简单的办法就是使用for然后再利用arr.length长度作为for最大限度值即可解决了,下面我们来看看一些有用的实例 例,for(){}遍历数组  代码如下: <script type="text/javascript">  <!-- var arr = new Array(13.5,3,4,5,6); for(var i=0;i<arr.length;i++){  arr[i] = arr[i]/2.0; } alert(arr);  /

js数组循环遍历数组内所有元素的方法_javascript技巧

例,for(){}遍历数组 复制代码 代码如下: <script type="text/javascript"> <!--var arr = new Array(13.5,3,4,5,6);for(var i=0;i<arr.length;i++){ arr[i] = arr[i]/2.0;}alert(arr); //--> </script> 例,for in循环遍历数组 复制代码 代码如下: <html><body>

js数组循环遍历数组内所有元素

例,for(){}遍历数组  代码如下 复制代码 <script type="text/javascript">  <!-- var arr = new Array(13.5,3,4,5,6); for(var i=0;i<arr.length;i++){  arr[i] = arr[i]/2.0; } alert(arr);  //-->  </script> 例,for in循环遍历数组  代码如下 复制代码 <html> &l

JavaScript中循环遍历Array与Map的方法小结_基础知识

js循环数组各种方法eg1: for (var i = 0; i < myStringArray.length; i++) { alert(myStringArray[i]); //Do something } eg2: Array.prototype.foo = "foo!"; var array = ['a', 'b', 'c']; for (var i in array) { alert(array[i]); } for(var i in this.$GLOBAL_DETA