js笔记--高阶函数filter()

filter()可以把array中的元素过滤掉,返回剩下的元素

实现机制:和map()类似,Arrayfilter()也接收一个函数。

map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true保留false丢弃该元素。

 

练习题目:

  (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中的空字符串删掉

    答: 

      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()接收的回调函数,可以有多个参数,第一个参数表示Array的某个元素,第二个参数表示元素的位置,第三个参数表示数组本身
    去除Array的重复元素:
    答:
     var r,
         arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];

      r = arr.filter(function (element, index, self) {
      return self.indexOf(element) === index;
      });

      去除重复元素依靠的是indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了。

  (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());
    }


参考廖雪峰老师的官方网站
posted @ 2019-09-05 17:01  菠萝tang的学习日记  阅读(485)  评论(0编辑  收藏  举报