1. 当前所在位置:
  2. 首页
  3. 捕鱼大师

javascript中filter的用法

2018-12-28 admin
  filter
 
  filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。
 
  和map()类似,Array的filter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
 
  例如,在一个Array中,删掉偶数,只保留奇数,可以这么写:
 
  1vararr=[1,2,4,5,6,9,10,15];
 
  2varr=arr.filter(function(x){
 
  3returnx%2!==0;
 
  4});
 
  5r;//[1,5,9,15]
 
  把一个Array中的空字符串删掉,可以这么写:
 
  1vararr=['A','','B',null,undefined,'C',''];
 
  2varr=arr.filter(function(s){
 
  3returns&&s.trim();//注意:IE9以下的版本没有trim()方法
 
  4});
 
  5r;//['A','B','C']
 
  可见用filter()这个高阶函数,关键在于正确实现一个“筛选”函数。
 
  回调函数
 
  filter()接收的回调函数,其实可以有多个参数。通常我们仅使用第一个参数,表示Array的某个元素。回调函数还可以接收另外两个参数,表示元素的位置和数组本身:
 
  复制代码
 
  1vararr=['A','B','C'];
 
  2varr=arr.filter(function(element,index,self){
 
  3console.log(element);//依次打印'A','B','C'
 
  4console.log(index);//依次打印0,1,2
 
  5console.log(self);//self就是变量arr
 
  6returntrue;
 
  7});
 
  复制代码
 
  利用filter,可以巧妙地去除Array的重复元素:
 
  复制代码
 
  1'usestrict';
 
  2
 
  3var
 
  4r,
 
  5arr=['apple','strawberry','banana','pear','apple','orange','orange','strawberry'];
 
  6r=arr.filter(function(element,index,self){
 
  7returnself.indexOf(element)===index;
 
  8});
 
  9console.log(r.toString());
 
  复制代码
 
  运行结果:
 
  apple,strawberry,banana,pear,orange
 
  去除重复元素依靠的是indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了。
 
  尝试用filter()筛选出素数:
 
  复制代码
 
  1'usestrict';
 
  2
 
  3functionget_primes(arr){
 
  4vari;
 
  5returnarr.filter(function(element){
 
  6varflag=true;
 
  7if(element<2){
 
  8flag=false;
 
  9}else{
 
  10for(vari=2;i<element;i++){
 
  11if(element%i==0){
 
  12flag=false;
 
  13break;
 
  14}
 
  15}
 
  16}
 
  17returnflag;
 
  18});
 
  19}
 
  20
 
  21//测试:
 
  22var
 
  23x,
 
  24r,
 
  25arr=[];
 
  26for(x=1;x<100;x++){
 
  27arr.push(x);
 
  28}
 
  29r=get_primes(arr);
 
  30if(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()){
 
  31console.log('测试通过!');
 
  32}else{
 
  33console.log('测试失败:'+r.toString());
 
  34}
 
  复制代码
 
  运行结果:
 
  测试通过!
捕鱼驾到