继续数组方法,今天应该到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的更多相关文章

  1. JavaScript 数组方法filter和reduce

    前言 在ES6新增的数组方法中,包含了多个遍历方法,其中包含了用于筛选的filter和reduce filter 主要用于筛选数组的filter方法,在使用中,不会改变原数组,同时会将符合筛选条件的元 ...

  2. 【译】你应该了解的JavaScript数组方法

    让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...

  3. JavaScript数组方法详解

    JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中 ...

  4. 一站式超全JavaScript数组方法大全

    一站式JavaScript数组方法大全(建议收藏) 方法一览表 详细操作 本人总结了JavaScript中有关数组的几乎所有方法(包含ES6之后新增的),并逐一用代码进行演示使用,希望可以帮助大家! ...

  5. JavaScript数组方法大全(推荐)

    原网址:http://www.jb51.net/article/87930.htm 数组在笔试中经常会出现的面试题,javascript中的数组与其他语言中的数组有些不同,为了方便之后数组的方法学习, ...

  6. 2018.2.27 JavaScript数组方法应用

    JavaScript数组方法应用 1.找出元素item在给定数组arr中的位置 function indexOf(arr,item){ return arr.indexOf(item); } func ...

  7. JavaScript数组方法大集合

    JavaScript数组方法集合 本文总结一下js数组处理用到的所有的方法.自己做个笔记. 数组方法 concat() 合并两个或多个数组 concat()能合并两个或者多个数组,不会更改当前数组,而 ...

  8. JavaScript数组方法--every、some、fill

    接上一篇,JavaScript数组方法--concat.push,继续其他的数组方法. every:every() 方法测试数组的所有元素是否都通过了指定函数的测试. 先看其使用方法: functio ...

  9. JavaScript 数组方法处理字符串 prototype

    js中数组有许多方法,如join.map,reverse.字符串没有这些方法,可以“借用”数组的方法来处理字符串. <!doctype html> <html lang=" ...

随机推荐

  1. 装了anaconda之后如何设置anaconda、python环境变量

    装了anaconda之后如何设置anaconda.python环境变量 1.装了anaconda之后如何设置anaconda环境变量 参考 https://www.cnblogs.com/avivi/ ...

  2. 关于WebService

    转自于:https://www.cnblogs.com/xdp-gacl/p/4048937.html 一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍 ...

  3. Movist for Mac(高清媒体播放器)v2.0.7中文特别版

    Movist for Mac中文破解版是目前Mac平台上最好用的视频播放器,功能强大简单好用.movist mac版拥有美观简洁的用户界面,提供多种功能,支持视频解码加速高品质的字幕,全屏幕浏览,是与 ...

  4. 使用kingshard遇到的坑

    禁止用mysqldump 连接kingshard, 会导致表锁死 读取NULL值变为文本 通过kingshard连接 select出来的null值变为文本"NULL" kingsh ...

  5. DOM 基础

    文档对象模型(Document Object Model)是表示和处理一个HTML或XML文档的常用方法 查找 直接查找 var obj = document.getElementById('i1') ...

  6. Docker系列(四)Centos6.5 搭建私人镜像仓库 v2

    .下载.运行registry 下载registry镜像: $ docker pull hub.c.163.com/library/registry 这个下载的过程有点长,耐心等待一下.O(∩_∩)O哈 ...

  7. spring事务详解(五)总结提高

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.概念 ...

  8. HanLP 自然语言处理 for nodejs

    HanLP 自然语言处理 for nodejs ·支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关 ...

  9. win2008安装并配置zabbix3.4 agent

    agent 下载地址: https://www.zabbix.com/download_agents 下载解压后有2个文件夹,一个是bin,存放32位和64位执行程序,一个是conf目录存放着配置文件 ...

  10. Linux基础入门-用户及文件权限管理

    一.Linux用户管理: 不同的用户的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于Linux的用户管理和权限机制,不同用户不能轻易查看.修改彼此的文件. 1. 查看用户: wh ...