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 相关文章推荐
在Javascript中定义对象类别
Dec 22 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
May 07 Javascript
js获取浏览器的可视区域尺寸的实现代码
Nov 30 Javascript
JavaScript中的连字符详解
Nov 28 Javascript
js获取ajax返回值代码
Apr 30 Javascript
使用JavaScript 编写简单计算器
Nov 24 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
axios学习教程全攻略
Mar 26 Javascript
浅谈Express异步进化史
Sep 09 Javascript
EL表达式截取字符串的函数说明
Sep 22 Javascript
浅谈vue 多个变量同时赋相同值互相影响
Aug 05 Javascript
基于JS实现快速读取TXT文件
Aug 25 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 面向对象的一个例子
2011/04/12 PHP
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
python logging通过json文件配置的步骤
2020/04/27 Python
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
励志演讲稿200字
2014/08/21 职场文书
详解Django的MVT设计模式
2021/04/29 Python