聊聊forEach

簡介forEach

forEach()方法用於調用數組的每一個元素,並將元素傳遞給回調函數。數組

注意: forEach()對於空數組是不會執行回調函數的。bash

forEach()是ES5中操做數組的一種方法,主要功能是遍歷數組。函數

語法

array.forEach(function(currentValue, index, arr), thisValue)ui

其中:this

  • currentValue 必需。當前元素
  • index 可選,當前元素的索引值
  • arr 可選,當前元素所屬的數組對象
  • thisValue 可選,傳遞給函數的值通常用 "this" 值。若是這個參數爲空, "undefined" 會傳遞給 "this" 值

返回值:undefinedspa

forEach()return不會立馬跳出函數,而是繼續執行,在文章的後面會具體描述解決辦法,先看一些實例:.net

實例

前面也說過,forEach()的主要功能是遍歷數組code

var arr=[1,2,3,4];
arr.forEach(alert);   //-> 在頁面上彈出數組的值
複製代碼

上面也提到了函數的參數,這裏寫個例子便於理解:cdn

var arr=[1,2,3,4];
arr.forEach(function(value,index,array){
   array[index] == value ;   //-> true
   sum+=value;
});
console.log(sum);  //-> 10
複製代碼

關於return的討論

咱們都知道,在for循環中,跳出循環能夠用break,可是在forEach循環遍歷中,break會報錯,而return也沒法跳出循環:對象

var arr=[1,2,3,4,5];
var num=3;
arr.forEach(function(value){
   if(value == num){
       return;
   }
   console.log(value);
});
複製代碼

瞧瞧咱們發現了什麼了不起的事情!這裏的return並無跳出循環返回,而是起到了for循環中continue的做用。

那麼咋中斷這個forEach呢?

中斷forEach的兩種方法

第一種:使用try···catch捕獲異常實現

try{
    var array=[1,2,3,4,5];
    array.forEach(function(value,index){
       if(value == 3){
           throw new Error("Ending");
       }
       console.log(value)
    });
}
catch(e){
    if(e.message!="Ending"){
        throw e;
    }
}
複製代碼

第二種:使用數組中另外兩個方法替代: arr.sonme()arr.every()

當some()內部return true時,跳出整個循環

var arr = [1,2,3,4,5];
var num = 3;
arr.some(function(v){
   if(v == num) {
       return true;
   }
   console.log(v);
});
複製代碼

當every()內部return false時跳出整個循環

var arr = [1,2,3,4,5];
var num = 3;
arr.every(function(v){
   if(v == num) {
       return false;
   }else{
       console.log(v);
       return true;
   }
});
複製代碼


參考: Javascript Array forEach()中沒法return和break,代替方法some()與every()

相關文章
相關標籤/搜索