• 前言

阅读本文前先来思考一个问题,面对一个非空数组,你如何快速对数组进行遍历,如何快速找到数组中第一个我们需要关注的数据元素,并且如何知道该元素在数组中对应的下标索引,可能用for循环遍历,然后判断元素是否符合条件,逐个遍历查找到需要的元素即可,实现起来也没有多么麻烦,本文就来介绍一个高阶一点的方法,直接拿到结果。

  • 正文

  1. find()方法详解

  • 语法及定义

   find()方法返回通过测试的数组中的第一个元素的值;

   find()方法为数组中的每一个元素都调用一次函数执行;

   当数组中的元素在测试条件时返回true时,fund()返回符合条件的元素,之后的值不会再调用执行函数,如果没有符合条件的元素返回undefined;

   注意:find()对于空数组不会执行函数,同时find()不会改变数组的原始值。

   语法:

        /**
* @param function 必要参数,用于执行每个数组元素的函数
* @param initialValue 可选。 传递给函数的值一般用 "this" 值。
*/
/**
* @param currentValue 必要参数, 必需。当前元素
* @param index 可选参数,当前参数的下标
* @param arr 可选参数,当前元素所属的数组对象
*/
array.find(function(currentValue, index, arr),thisValue)
  • 使用方法

   (1)根据定义模仿find()方法的实现

        //原型添加
Array.prototype.myfind=function(func, context){
const self = this
//对于空数组不做处理
if(self.length=="0"){
return
}
const ctx = context ? context : self //this指向问题
let res = ""//定义返回结果
let isFirst = true//用于区别只返回第一个满足条件的值
for (let i = 0; i < ctx.length; i++) {
if(func(ctx[i]) && isFirst){
isFirst = false
res = ctx[i]
}
}
return res ? res : undefined
}
var arr=[1,2,3,4,5]
var myfunc=(v)=>v>2
console.log(arr.myfind(myfunc))//输出3

   (2)在对象数组中快速找到需要的值

        //快速找到小明的年龄是多少
var arrInfo=[{name:"小明",age:17},{name:"小红",age:18},{name:"小王",age:19}]
var myage=arrInfo.find(v=>v.name=="小明").age
console.log("小明的年龄是"+myage)//输出小明的年龄是17

   (3)判断数组中是否含有某个值

        //判断数组arr是否存在5
var arr=[0,1,2,3]
console.log(arr.find(v=>v==5));//undefied表示数组不存在该元素

    如果你上面的fidn()已经完全明白了,那么下边的findIndex()就更加容易掌握。

2.findIndex()方法详解

  • 语法及定义

     findIndex()方法返回数组第一个符合测试条件的元素的下标索引;

   findIndex()方法为数组每个元素都调用一次函数执行;

   findIndex()方法当数组中的元素在测试条件时返回true时,findIndex()返回符合条件的元素的索引位置,之后的元素不会再调用该测试函数执行,如果没有符合条件的元素则返回-1。

   注意:findIndex()对于空数组不会执行,并且不会改变数组的原始值。

   语法:

         /**
* @param function 必要参数,用于执行每个数组元素的函数
* @param initialValue 可选。 传递给函数的值一般用 "this" 值。
*/
/**
* @param currentValue 必要参数, 必需。当前元素
* @param index 可选参数,当前参数的下标
* @param arr 可选参数,当前元素所属的数组对象
*/
array.findIndex(function(currentValue, index, arr), thisValue)
  • 使用方法

    (1)根据定义模仿findIndex()方法的实现

         //原型添加
Array.prototype.myfindIndex=function(func, context){
const self = this
//对于空数组不做处理
if(self.length=="0"){
return
}
const ctx = context ? context : self
let res = ""//定义返回结果
let isFirst = true//用于区别只返回第一个满足条件的值
for (let i = 0; i < ctx.length; i++) {
if(func(ctx[i]) && isFirst){
isFirst = false
res = i
}
}
return res ? res : "-1"
}
var arr=[0,1,2,3]
var myfunc=(v)=>v>2
console.log(arr.myfindIndex(myfunc))//输出3

    (2)判断数组是否存在某个元素

    //判断数组种是否存在6
var arr=[1,2,3,4,5]
console.log(arr.findIndex(v=>v==6))//-1 表示数组种不存在值为6的元素

总结

    以上就是本文的全部内容,希望给读者带来些许的帮助和进步,方便的话点个关注,小白的成长之路会持续更新一些工作中常见的问题和技术点。最后给大家介绍一款更改VsCode背景图片的插件,直接拓展插件栏搜background-cover。看下我设置之后的效果,是不是感觉每天都是元气满满的一天。

js--数组的find()和findIndex()方法的使用介绍的更多相关文章

  1. js数组中的find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()方法的详解和应用实例

    1. find()与findIndex() find()方法,用于找出第一个符合条件的数组成员.它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该 ...

  2. js数组去重的4种方法

    js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...

  3. JS控制语句(if、for等)、数组(例题)、方法(常用方法介绍)

    控制语句 If if (1>2){ alert() } var a= parseInt(prompt('请输入数字')); if (isNaN(a)) { alert("输入的不是数字 ...

  4. JS数组与对象的遍历方法大全

    本文简单解析各种数组和对象属性的遍历方法: 原生for循环.for-in及forEach ES6 for-of方法遍历类数组集合 Object.key()返回键名的集合 jQuery的$.each() ...

  5. JS数组去重的9种方法(包括去重NaN和复杂数组类型)

    其实网上已经有很多js数组的去重方法,但是我看了很多篇并自己通过代码验证,发现都有一些缺陷,于是在研究多篇代码之后,自己总结了9种方法,如果有哪里不对请及时纠正我哈~ 转载请表明出处 测试代码 let ...

  6. Js 数组去重的几种方法总结

           去重是开发中经常会碰到的一一个热点问题,不过目前项目中碰到的情况都是后台接口使用SQL去重,简单高效,基本不会让前端处理去重.那么前端处理去重会出现什么情况呢?假如每页显示10条不同的数 ...

  7. 【JS】JS数组添加元素的三种方法

    1.push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 1).语法: arrayObject.push(newelement1,newelement2,....,newelement ...

  8. js数组去重的4个方法

    面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项, 这个问题看起来简单,但是其实暗藏杀机. 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解. 我总共总结4种 ...

  9. js数组去重的几种方法

    1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持 ...

随机推荐

  1. 解决threadLocal父子变量传递问题

    一.问题的提出 在系统开发过程中常使用ThreadLocal进行传递日志的RequestId,由此来获取整条请求链路.然而当线程中开启了其他的线程,此时ThreadLocal里面的数据将会出现无法获取 ...

  2. Java中几种常见的循环

    多重if_else: package com.dengchaoqun.ht; public class Double_For02 { /** * * 打印乘法表 */ public static vo ...

  3. NOIP初赛篇——09原码、反码和补码

    一.数的原码.补码和反码表示 机器数和真值 ​ 在计算机中,表示数值的数字符号只有0和1两个数码,我们规定最高位为符号位,并用0表示正符号,用1表示负符号.这样,机器中的数值和符号全"数码化 ...

  4. 深入浅出Dotnet Core的项目结构变化

    有时候,越是基础的东西,越是有人不明白.   前几天Review一个项目的代码,发现非常基础的内容,也会有人理解出错. 今天,就着这个点,写一下Dotnet Core的主要类型的项目结构,以及之间的转 ...

  5. 【JS学习】for-in与for-of

    前言:本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述: 名称 遍历 适用 for-in 索引 主要建议白能力对 ...

  6. 【Linux】使用cryptsetup加密磁盘 策略为LUKS

    LUKS(Linux Unified Key Setup)为Linux硬盘分区加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令.因为它的加密密钥独立于口令,所以如果口令失 ...

  7. 【Jboss】A RESOURCE POOL IS PERMANENTLY BROKEN!

    jboss后台报错,其中有这个错误 [error] A RESOURCE POOL IS PERMANENTLY BROKEN! 查阅多方资料后发现.数据库连接配置文件中,有地方存在空格,导致服务连接 ...

  8. 【ORA】ORA-4031错误分析和解决办法

    1. ORA-4031错误的原因,一般是大量的hard parse导致了shared pool中的free list中产生大量的内存小碎片,当一个需要很大内存来进行hard parse的sql语句到来 ...

  9. SQL语句中 ` 的作用

    SQL语句中 ` 的作用 做攻防世界WEB区 supersqli 题目,在构建SQL语句时,遇到SQL语句中有 ` 时可以解析,没有则不能. 查阅资料得知,` 通常用来说明其中的内容是数据库名.表名. ...

  10. thinkpad8平板安装win10系统

    ThinkPad8 因为是平板电脑,只有一个micro USB接口,常规安装没法使用鼠标或键盘进行输入,所以难倒很多人. 幸好前段时间买了根otg线和3.0usb hub,安装方法记录如下: 准备:U ...