1. 程式人生 > >js 的filter()方法

js 的filter()方法

nbsp undefine index 篩選 兼容 [] 返回 算法 插入

filter()方法使用指定的函數測試所有元素,並創建一個包含所有通過測試的元素的新數組。

    filter()基本語法:
       arr.filter(callback[, thisArg])

   filter()參數介紹:
      參數名    說明
      callback   用來測試數組的每個元素的函數。調用時使用參數 (element, index, array)
      返回true表示保留該元素(通過測試),false則不保留。
      thisArg    可選。執行 callback 時的用於 this 的值。

  filter()用法說明:

    filter 為數組中的每個元素調用一次 callback 函數,並利用所有使得 callback 返回 true 或 等價於 true 的值 的元素創建一個新數組。
    callback 只會在已經賦值的索引上被調用,對於那些已經被刪除或者從未被賦值的索引不會被調用。那些沒有通過 callback 測試的元素會被跳過,不會被包含在新數組中。

    callback 被調用時傳入三個參數:

    元素的值
    元素的索引
    被遍歷的數組
    如果為 filter 提供一個 thisArg 參數,則它會被作為 callback 被調用時的 this 值。否則,callback 的this 值在非嚴格模式下將是全局對象,嚴格模式下為 undefined。

    filter 不會改變原數組。

    filter 遍歷的元素範圍在第一次調用 callback 之前就已經確定了。在調用 filter 之後被添加到數組中的元素不會被 filter 遍歷到。
    如果已經存在的元素被改變了,則他們傳入 callback 的值是 filter 遍歷到它們那一刻的值。被刪除或從來未被賦值的元素不會被遍歷到。

示例:

/*
filter()實例:篩選排除掉所有的小值?

下例使用 filter 創建了一個新數組,該數組的元素由原數組中值大於 10 的元素組成。

*/

function isBigEnough(element) {
return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);

console.log(filtered);//[ 12, 130, 44 ]

/*
  filter()兼容舊環境
  filter 被添加到 ECMA-262 標準第 5 版中,因此在某些實現環境中不被支持。可以把下面的代碼插入到腳本的開頭來解決此問題,
  該代碼允許在那些沒有原生支持 filter 的實現環境中使用它。該算法是 ECMA-262 第 5 版中指定的算法
*/

Array.prototype.filter = Array.prototype.filter || function(func) {
var arr = this;
var r = [];
for (var i = 0; i < arr.length; i++) {
if (func(arr[i],i,arr)) {
r.push(arr[i]);
}
}
return r;
}

js 的filter()方法