every,some,map,forEach,filter (AS3中Array實用方法,轉)

在AS3中,鮮有使用callback的API,本文提供的5個實用方法在項目中的使用頻率頗高。

一、案例
設有一個編程輔導班,有學生10人,某次測試成績如下:
var results :Array = [80,81,90,100,100,97,90,60,50,60];
假設這10個成績是由用戶輸入,事先我們並不知道。現作如下統計:

1,90以上爲優秀,寫一個函數統計所有優秀學生的成績,並打印輸出
results.filter(
   function(item :Number, index :int, arr :Array) : Boolean
   {
       return item > 89 ? true : false;
   }
).forEach(
      function(item :Number, index :int, arr :Array) : void
     {
         trace(item);
     }
);
filter,按指定函數過濾元素,彙集返回值爲true元素組成新的數組,函數值類型爲布爾
forEach,在每一個元素上執行函數,函數返回類型爲空

2,由於判卷老師的失誤,所有非滿分且及格(>=60)的學生的成績均被誤加了5分,請重新統計所有學生的成績並打印輸出
results.map(
    function(item :Number, index :int, arr :Array) :Number
    {
return (item < 100 && item >= 60) ? (item-5) : item;
    }
).forEach(
      function(item :Number, index :int, arr :Array) : void
      {
          trace(item);
      }
);
map,使用同一函數處理每一個元素並返回,彙集返回結果組成新數組,函數返回類型爲元素類型

3,假定這個輔導班的成績一向很好,且學生數海量。如果該班成績有1人滿分,則可以獲得院校的千元獎金,試計算該班有無獲得獎金的資格
if (results.some(function(item :Number, index :int, arr :Array) :Boolean
{

    return item == 100 ? true :false;

}

))
{
       trace("恭喜獲得千元大獎");
}else{
       trace("請考慮換一位老師,聘請sban如何");
}
some,懶惰的企圖找到一個元素合乎要求,只要有一個返回true停止,函數值類型爲布爾

4,假定這個輔導班的成績一向極差,且學生數海量。試統計該班成績是否全部及格
if (results.every(
          function(item :Number, index :int, arr :Array) :Boolean
         {
                return item > 59 ? true :false;
         }
))
{
     trace("恭喜全部及格了");
}else{
       trace("基礎太差了,sban不願受聘,另請高明吧");
}
every,貪婪的試圖匹配每一個元素,真到有一個返回false爲止,函數值類型爲布爾。

二、前面一個習題的答案
在<代碼智能提示的陷阱>中,練習2提到:如果不去掉關鍵字this,如何使程序得到同樣的輸出結果?
如果不去掉this,可以向some API傳遞this對象,如下:
public function Main():void
{
     var arr1 :Array = ["as3", "expert", "programming"];
     arr1.some(
                 function(item :String, index :int=-1, arr :Array=null) : Boolean
                {
                      if (item == "as3")
                      {
                          trace(item, this.author);
                          return true;
                      }
                      return false;
                 },     this);
}
private var author : String = "sban";
本文所提到的其它API,與some相同,均可以傳遞this對象,這樣在匿名函數內部便可以使用this關鍵字。

三、總結

1,filter,按指定函數過濾元素,彙集返回值爲true元素組成新的數組,函數值類型爲布爾
2,forEach,在每一個元素上執行函數,函數返回類型爲空
3,every,貪婪的試圖匹配每一個元素,真到有一個返回false爲止,函數值類型爲布爾
4,some,懶惰的企圖找到一個元素合乎要求,只要有一個返回true停止,函數值類型爲布爾
5,map,使用同一函數處理每一個元素並返回,彙集返回結果組成新數組,函數返回類型爲元素類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章