JavaScript数组方法--filter、find、findIndex
继续数组方法,今天应该到filter了。
filter:filter()
方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
使用:var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);仅仅从字面理解一下filter,就是过滤,怎么过滤呢?通过给定一个回调函数,过滤出来符合函数实现的元素。
从示例中看,也就是说,需要过滤出来元素的单词长度大于6的所有元素。
查看一下结果呢!语法:
var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
filter有两个参数,第一个就是回调函数,第二个参数与之前我们说到的some、every啊类似,基本上就就是数组函数只要提供了回调函数,都会有这么一个用于执行callback回调的this值。
回调函数也是三个参数,就没什么可说的了,数组函数的所有回调函数都是这三个参数:元素element、索引index、数组本身array。
来吧,开始重构:function filter(arr, fn, thisArg) {
if (!(arr instanceof Array)) throw new Error("请确保第一个参数类型为数组")
var results = []
for (var i = 0; i < arr.length; i++) {
if (fn.call(thisArg, arr[i], i, arr))
results[results.length] = arr[i]
}
return results
}是不是也真的没什么好神奇的?
find:find()
方法返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined
。
使用:var array1 = [5, 12, 8, 130, 44];
var found = array1.find(function(element) {
return element > 10;
});
console.log(found);结果:
其实依据我们之前介绍其他的数组方法所说的,很容易理解到,find方法也是提供一个回调函数,那么必然也有一个可选的用于回调函数的this值,他查找并返回的是第一个符合回调函数测试结果的元素。其他的并没有什么特殊之处。
function find(arr, fn, thisArg) {
if (!(arr instanceof Array)) throw new Error("请确保第一个参数类型为数组")
for (var i = 0; i < arr.length; i++) {
if (fn.call(thisArg, arr[i], i, arr)) {
return arr[i]
}
}
return undefined
}说到这里,自然而然的可以预料到,下一个函数必然是findIndex了,从字面上就可以理解到findIndex是干什么的了!而且有find在前,findIndex也真的没什么好说的了。
findIndex:findIndex()
方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。
简单说一下,find返回的是数组符合回调测试条件的第一个元素,findIndex返回的是符合回调测试条件的第一个元素的索引。function findIndex(arr, fn, thisArg) {
if (!(arr instanceof Array)) throw new Error("请确保第一个参数类型为数组")
for (var i = 0; i < arr.length; i++) {
if (fn(thisArg, arr[i], i, arr)) {
return i
}
}
return -1
}看这两个重构的函数都没有他打区别,也就是一个元素,一个索引值而已。
JavaScript数组方法--filter、find、findIndex的更多相关文章
- JavaScript 数组方法filter和reduce
前言 在ES6新增的数组方法中,包含了多个遍历方法,其中包含了用于筛选的filter和reduce filter 主要用于筛选数组的filter方法,在使用中,不会改变原数组,同时会将符合筛选条件的元 ...
- 【译】你应该了解的JavaScript数组方法
让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...
- JavaScript数组方法详解
JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中 ...
- 一站式超全JavaScript数组方法大全
一站式JavaScript数组方法大全(建议收藏) 方法一览表 详细操作 本人总结了JavaScript中有关数组的几乎所有方法(包含ES6之后新增的),并逐一用代码进行演示使用,希望可以帮助大家! ...
- JavaScript数组方法大全(推荐)
原网址:http://www.jb51.net/article/87930.htm 数组在笔试中经常会出现的面试题,javascript中的数组与其他语言中的数组有些不同,为了方便之后数组的方法学习, ...
- 2018.2.27 JavaScript数组方法应用
JavaScript数组方法应用 1.找出元素item在给定数组arr中的位置 function indexOf(arr,item){ return arr.indexOf(item); } func ...
- JavaScript数组方法大集合
JavaScript数组方法集合 本文总结一下js数组处理用到的所有的方法.自己做个笔记. 数组方法 concat() 合并两个或多个数组 concat()能合并两个或者多个数组,不会更改当前数组,而 ...
- JavaScript数组方法--every、some、fill
接上一篇,JavaScript数组方法--concat.push,继续其他的数组方法. every:every() 方法测试数组的所有元素是否都通过了指定函数的测试. 先看其使用方法: functio ...
- JavaScript 数组方法处理字符串 prototype
js中数组有许多方法,如join.map,reverse.字符串没有这些方法,可以“借用”数组的方法来处理字符串. <!doctype html> <html lang=" ...
随机推荐
- UNION ALL 心得
TABLE_A 表 UNION ALL TABLE_B 表 UNION 或者 UNION ALL 之后 1.字段长度 必须相同 (如A 10 个列,则B 也要10个列) 2.查询条件也要相同 (A ...
- CCF-Crontab-201712-3
大概是CCf第三题中最麻烦的一个吧 我的思路其实我觉得还可以,模拟...可是超时了233 只有90分 [ 可是我看网上其他人也是模拟算法啊, 速度还是太慢了 120行, 1个半小时 大部分花在了de ...
- PHP全局变量,超全局变量
php中有许多超全局变量,这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. 这些超全局变量是: $GLOBALS 引用全局 ...
- sql base and plsql and database
sql base: http://www.runoob.com/sql/sql-tutorial.html Oracle系统表整理+常用SQL语句收集: https://www.cnblogs.co ...
- python 多进程的两种创建方式
Python中使用线程有两种方式:函数或者用类来包装线程对象. 第一种---------函数 菜鸟教程的我没看懂,说说我自己懂的----看视频理解的 import time import thread ...
- 关于python的创立模块和导入
首先,模块就是所有的.py文件,而模块的作用便是简化代码,使其看得简易. 例如这就是模块: 'a test'这是注释,并没有什么作用. 而创立模块的第一步:建立一个.py文件例如:这是上方这串代码的模 ...
- 命令行编译多个java文件
如何使用命令行编译多个java文件 文件结构: method 1 cd javaproject javac -sourcepath javapath -d classpath javapath/*.j ...
- python基础教程001_安装python
1.安装python Windows http://www.python.org下载python安装包 比如python-2.7.12.msi执行安装 安装完毕后,开始->搜索程序跟文件-> ...
- springboot 添加 jsp支持
idea 新建springboot项目 packageing:选择 war next 勾选web 添加jar包 <dependency> <groupId>org.apac ...
- python selenium 处理时间日期控件(十六)
测试过程中经常遇到时间控件,需要我们来选择日期,一般处理时间控件通过层级定位来操作或者通过调用js来实现. 1.首先我们看一下如何通过层级定位来操作时间控件. 通过示例图可以看到,日期控件是无法输入日 ...