Array.filter()過濾陣列元素

Javascript的Array.filter()方法:

Array.filter()方法會過濾陣列的元素,並將通過測試的元素傳回成為一個新陣列。

Array.filter()方法使用回呼函式來對元素進行過濾,須由設計師自行撰寫過濾程式。

除了被刪除或是未給定初始值的元素外,filter()方法會為每一個陣列元素呼叫一次回呼函式以進行測試。

filter()方法只對呼叫filter()當時的陣列元素進行過濾,往後新增的元素並不影響結果。

filter()方法也不改變現有陣列,只是傳回新的陣列。

此方法出現在ECMA-262第五版中,因此可能會有些瀏覽器並不支援這方法。

若要確保在所有瀏覽器中都能正確執行,可在原型中自行定義此方法。

Array.filter()的語法:

array.filter( callbackfn [ , thisArg ] )

callbackfn:回呼函式,用來測試陣列中的元素,需由設計師自行撰寫,

                    callbackfn有三個傳入值element、index、array,

                    element:測試元素的值。

                    index:測試元素索引。

                    array:測試的陣列。

                   測試通過則傳回true,失敗則傳回false。

thisArg:callbackfn中的this代表的物件,如果省略則callbackfn中的this代表全域物件。

Array.filter()的範例:

將陣列中偶數留下:

<script type="text/javascript">
  var Arr1=[1,2,3,4,5,6,7,8,9,10];
  function even(element, index, array){
  if (element%2 ==0) {
    return true;
    }
    else {
    return false;
    }
  }
  var Arr2=Arr1.filter(even);
  document.writeln(Arr2);
</script>

Array.filter()的範例輸出:

2,4,6,8,10

在原型中新增Array.filter()方法:

Array.filter()方法是ECMS-262中的標準方法,但並非所有瀏覽器都支援,

為確保在所有瀏覽器中都能正確執行,可自行在原型中定義該方法。

下面是MDN 中 Array filter method 提供的程式,將其放入script的開頭:

if (!Array.prototype.filter){
  Array.prototype.filter = function(fun /*, thisp */) {
    "use strict";
    if (this == null)
      throw new TypeError();
    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun != "function")
      throw new TypeError();
    var res = [];
    var thisp = arguments[1];
    for (var i = 0; i < len; i++) {
      if (i in t) {
        var val = t[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, t))
          res.push(val);
       }   
    }    
    return res; 
  };
}

關於Array物件的其他屬性與方法,請參考:陣列物件 Array

 
 

  按個讚!~支持本站!~

FB推薦載入中  

你可能會有興趣的文章