filter()能夠把array中的元素過濾掉,返回剩下的元素javascript
實現機制:和map()
相似,Array
的filter()
也接收一個函數。java
和map()
不一樣的是,filter()
把傳入的函數依次做用於每一個元素,而後根據返回值是true保留
false
丟棄該元素。數組
練習題目:app
(1)在一個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]
(2)把一個Array
中的空字符串刪掉網站
答: spa
回調函數
接收的回調函數,能夠有多個參數,第一個參數表示的某個元素,第二個參數表示元素的位置,第三個參數表示數組自己
去除的重複元素:
答: var arr = ['A', '', 'B', null, undefined, 'C', ' ']; var r = arr.filter(function (s) { return s && s.trim(); // 注意:IE9如下的版本沒有trim()方法 }); r; // ['A', 'B', 'C']
(3)filter()ArrayArray
var r,
arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
r = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});code
去除重複元素依靠的是indexOf
老是返回第一個元素的位置,後續的重複元素位置與indexOf
返回的位置不相等,所以被filter
濾掉了。ip
(4)用filter()
篩選出素數
答:
function get_primes(arr) { var sushu = arr.filter( function(x){ if(x==1){ return false; } if(x==2){ return true; } for(var i = 2 ; i < x ; i++){ if(x % i === 0){ return false; } } return true; }); return sushu; } var x, r, arr = []; for (x = 1; x < 100; x++) { arr.push(x); } r = get_primes(arr); if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) { console.log('測試經過!'); } else { console.log('測試失敗: ' + r.toString()); }參考廖雪峯老師的官方網站