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 dialog里的服务器控件 事件失效问题
Dec 08 Javascript
jquery实现可旋转可拖拽的文字效果代码
Jan 27 Javascript
Vue.js每天必学之Class与样式绑定
Sep 05 Javascript
微信小程序 Video API实例详解
Oct 02 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
Jan 19 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
Feb 22 Javascript
vue.js动态数据绑定学习笔记
May 19 Javascript
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
ES6 Promise对象的含义和基本用法分析
Jun 14 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
Oct 15 Javascript
Node.js API详解之 zlib模块用法分析
May 19 Javascript
基于javascript实现移动端轮播图效果
Dec 21 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+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
jquery密码强度校验
2015/12/02 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python爬取微信公众号文章的方法
2019/02/26 Python
python中 * 的用法详解
2019/07/10 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
python画图常规设置方式
2020/03/05 Python
爱游人:Travelliker
2017/09/05 全球购物
活动总结模板
2014/05/09 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
婚前保证书范文
2015/02/28 职场文书
《确定位置》教学反思
2016/02/18 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
如何用python插入独创性声明
2021/03/31 Python
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript
vscode内网访问服务器的方法
2022/06/28 Servers