JavaScript中filter的用法实例分析


Posted in Javascript onFebruary 27, 2019

本文实例讲述了JavaScript中filter的用法。分享给大家供大家参考,具体如下:

filter

filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。

map()类似,Array的filter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。

例如,在一个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()这个高阶函数,关键在于正确实现一个“筛选”函数。

回调函数

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
  return true;
});

利用filter,可以巧妙地去除Array的重复元素:

'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

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

尝试用filter()筛选出素数:

'use strict';
function get_primes(arr) {
  var i;
  return arr.filter(function (element) {
      var flag=true;
      if(element<2){
      flag=false;
    }else {
      for(var i=2;i<element;i++){
        if (element%i==0){
          flag=false;
          break;
        }
      }
    }
    return flag;
  });
}
// 测试:
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());
}

运行结果:

测试通过!

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

Javascript 相关文章推荐
jquery 追加tr和删除tr示例代码
Sep 12 Javascript
分享网页检测摇一摇实例代码
Jan 14 Javascript
jQuery控制frames及frame页面JS的方法
Mar 08 Javascript
Bootstrap网格系统详解
Apr 26 Javascript
Angular2内置指令NgFor和NgIf详解
Aug 03 Javascript
微信浏览器禁止页面下拉查看网址实例详解
Jun 28 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
Oct 09 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
Oct 25 Javascript
Vue EventBus自定义组件事件传递
Jun 25 Javascript
在微信小程序中保存网络图片
Feb 12 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
Jul 18 Javascript
解决Vue-cli无法编译es6的问题
Oct 30 Javascript
jQuery中each和js中forEach的区别分析
Feb 27 #jQuery
简单了解node npm cnpm的具体使用方法
Feb 27 #Javascript
js中对象与对象创建方法的各种方法
Feb 27 #Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 #Javascript
react的滑动图片验证码组件的示例代码
Feb 27 #Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 #jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
Feb 27 #jQuery
You might like
一周学会PHP(视频)Http下载
2006/12/12 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
PHP7匿名类的用法示例
2019/04/05 PHP
JavaScript类和继承 prototype属性
2010/09/03 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
JavaScript常用工具函数库汇总
2020/09/17 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
django框架ModelForm组件用法详解
2019/12/11 Python
python各层级目录下import方法代码实例
2020/01/20 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
如何保障Web服务器安全
2014/05/05 面试题
优秀语文教师事迹
2014/05/18 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
初中班长竞选稿
2015/11/20 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python