天天看點

JavaScript中的過濾器(filter)

定義:

filter()方法會建立一個新數組,原數組的每個元素傳入回調函數中,回調函數中有return傳回值,若傳回值為true,這個元素儲存到新數組中;若傳回值為false,則該元素不儲存到新數組中;原數組不發生改變。

注意: filter() 不會對空數組進行檢測。

注意: filter() 不會改變原始數組。

文法:

 array.filter(function(currentValue,index,arr), thisValue)           

複制

JavaScript中的過濾器(filter)

用法:

filter 為數組中的每個元素調用一次 callback 函數,并利用所有使得 callback 傳回 true 或 等價于 true 的值 的元素建立一個新數組。

callback 隻會在已經指派的索引上被調用,對于那些已經被删除或者從未被指派的索引不會被調用。那些沒有通過 callback 測試的元素會被跳過,不會被包含在新數組中。

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

1.元素的值。

2.元素的索引。

3.被周遊的數組。

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

filter 不會改變原數組。

filter 周遊的元素範圍在第一次調用 callback 之前就已經确定了。在調用 filter 之後被添加到數組中的元素不會被 filter 周遊到。

如果已經存在的元素被改變了,則他們傳入 callback 的值是 filter 周遊到它們那一刻的值。被删除或從來未被指派的元素不會被周遊到。

執行個體:

例如,在一個Array中,删掉偶數,隻保留奇數,可以這麼寫:

var arr = [1, 2, 4, 5, 6, 9, 10, 15];
 var r = arr.filter(function (x) {
     return x % 2 !== 0;
 });
 r; // [1, 5, 9, 15]           

複制

把一個Array中的空字元串删掉,可以這麼寫:

var arr = ['A', '', 'B', null, undefined, 'C', '  '];
 var r = arr.filter(function (s) {
     return s && s.trim(); // 注意:IE9以下的版本沒有trim()方法
 });
 r; // ['A', 'B', 'C']           

複制

filter()接收的回調函數,其實可以有多個參數。通常我們僅使用第一個參數,表示Array的某個元素。回調函數還可以接收另外兩個參數,表示元素的位置和數組本身:

var arr = ['A', 'B', 'C'];
 var r = arr.filter(function (element, index, self) {
     console.log(element); // 依次列印'A', 'B', 'C'
     console.log(index); // 依次列印0, 1, 2
     console.log(self); // self就是變量arr,列印A,B,C
     return true;
 });           

複制

利用filter,可以巧妙地去除Array的重複元素:

1 'use strict';
 
 var r,
     arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
   r = arr.filter(function (element, index, self) {
      return self.indexOf(element) === index;
   });
 console.log(r.toString()); //apple,strawberry,banana,pear,orange           

複制