JavaScript中filter的用法实例分析
作者:cjx_work 发布时间:2024-04-10 10:59:42
标签:JavaScript,filter
本文实例讲述了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.aspxhome.com/code/HtmlJsRun测试上述代码运行效果。
希望本文所述对大家JavaScript程序设计有所帮助。
来源:https://www.cnblogs.com/cjx-work/p/8052865.html


猜你喜欢
- 有时候会出现索引问题,显示scanning files to index解决方法:in pycharm, go to the "F
- 本文实例讲述了Python图像处理之简单画板实现方法。分享给大家供大家参考,具体如下:Python图像处理也是依赖opencv的Python
- pycharm部署anaconda环境Pycharm: python编辑器,社区版本Anaconda:开源的python发行版本(专注于数据
- XHTML规范中有一条标准就是“每个XHTML标签都有一个结束标记”。那么对于HTML中原来不带结束标记的元素,则在该结束前加上“/”来关闭
- 图表是比干巴巴的表格更直观的表达,简洁、有力。工作中经常遇到的场景是,有一些数值需要定时的监控,比如服务器的连接数、活跃用户数、点击某个按钮
- 今天业务上碰到用pandas处理一个大文件的内存不够问题,需要做concat 合并多个文件,每个文件数据在1.4亿行左右。当时第一反应是把d
- 前言昨天写小项目的时候遇到了一个需求:把txt文档的数据导入到mysql数据库中,开始本来想直接用Mysql Workbench导入TXT文
- vue后台返回base64图片无法显示关于后台接口返回的图片base64格式页面无法显示的问题,我遇到的原因是因为返回的一串内容里面存在空格
- 需求说明:通过在界面上输入春联的上、下批和横批汉字从而生成春联图像,最后将春联图片保存。有实际需要的还可以将春联打印。实现过程:实现思路是先
- 执行数据库更新update操作的时候数据库卡死了问题分析一般都是数据库事务未提交,导致update或者delete卡死。解决办法在执行完更新
- 环境准备Python3.5以上Appium Server服务器Android SDK,需要用到adb服务需要依赖Appium-Python-
- 如何在线更改密码?<%id = Request("id")newpassword =
- 注:IE8以前的版本均不支持该特性为了向文档中插入生成内容,可以使用:before与:after伪元素。如,我想在所有链接的后面加上&quo
- python现在的版本,主要是python2和python3两个大版本,这两个版本有很大的不同。当我们在自己电脑上同时安装了python2.
- 如下 <!DOCTYPE HTML> <html> <head> <meta charset=&q
- 1.条件语句几个注意点和C#不一样的。if a < 5 { return 0} else {
- 前言本文主要给大家介绍关于python中__init__、__new__和__call__方法的相关内容,分享出来供大家参考学习,下面话不多
- 本文研究的主要内容是Python中装饰器相关学习总结,具体如下。装饰器(decorator)功能引入日志函数执行时间统计执行函数前预备处理执
- 输入:数字m mm,n nn输出:m mm行n nn列的数字蛇形方阵1. 从方阵最左上角开始,顺时针向内填充。初始化一个m mm行n nn列
- 只想回答一个问题: 当编译器要读取obj.field时, 发生了什么?看似简单的属性访问, 其过程还蛮曲折的. 总共有以下几个step: 1