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()); }参考廖雪峰老师的官方网站