定義:
filter()方法會建立一個新數組,原數組的每個元素傳入回調函數中,回調函數中有return傳回值,若傳回值為true,這個元素儲存到新數組中;若傳回值為false,則該元素不儲存到新數組中;原數組不發生改變。
注意: filter() 不會對空數組進行檢測。
注意: filter() 不會改變原始數組。
文法:
array.filter(function(currentValue,index,arr), thisValue)
複制

用法:
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
複制