Javascript 数组轮回遍历之forEach

forEach是javascript中遍历数组的要领,大部分人经常运用for()轮回来遍历数组,如今我们来看一下forEach的用法。

兼容性

Firefox 和Chrome 的Array 范例都有forEach的函数。运用以下:

<script>  
var arryAll = [];  
arryAll.push(1);  
arryAll.push(2);  
arryAll.push(3);  
arryAll.push(4);  
  
arryAll.forEach(function(e){  
    alert(e);  
})  
  
</script>  

然则在IE中却没有forEach这个要领 :alert(Array.prototype.forEach); //undefined

然则我们能够运用以下要领来让IE兼容这个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++;  
        }  
    };  
}  

通常有轮回的处所,都邑涉及到跳出轮回的状态,那末forEach怎样跳出轮回呢?
Js此种状态的forEach不能运用continue, break;能够运用以下两种体式格局:

  1. if 语句掌握

  2. return (return true/return false) return –> 相似continue

例子:掏出数组中3的倍数和7的倍数的数

<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(7);  
arryAll.push(21);  
arryAll.push(22);  
arryAll.push(28);  
var arrySpecial = [];  
arryAll.forEach(function(e){  
    if(e%2==0)  
    {  
        arrySpecial.push(e);  
    }else if(e%3==0)  
    {  
        arrySpecial.push(e);  
    }  
})
</script>  
    原文作者:CodeMan
    原文地址: https://segmentfault.com/a/1190000010278926
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞