JS判断是否存在某个元素(includes、indexOf、find、findeIndex、some)(every 数组内所有值是否相同)

  方法一:array.includes(searcElement[,fromIndex])

 此方法判断数组中是否存在某个值,如果存在返回true,否则返回false

  • searchElement:需要查找的元素,必选。
  • fromIndex:可选,从该索引处开始查找元素。如果省略该参数,则从数组的头开始查找。如果 fromIndex 大于或等于数组长度,则返回 false。
const numbers = [1, 2, 3, 4, 5]console.log(numbers.includes(3)) // true
console.log(numbers.includes(6)) // false

如果想要检查数组中是否包含某个对象,可以使用 some() 方法

const users = [{ name: '张三', age: 20 },{ name: '李四', age: 18 },{ name: '王五', age: 35 }
]const user = { name: '李四', age: 18 }const isUserIncluded = users.some(u => u.name === user.name && u.age === user.age)console.log(isUserIncluded) //true

 具体some()方法见下文。

 方法二: array.indexOf

 indexOf 不存在返回-1,存在返回第一次出现的索引

array.indexOf(item,start) 

参数说明: 

item:必须。查找的元素。 

start:可选的整数参数。规定在字符串中开始检索的位置。

它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。

var arr = [1, 2, 3, 9, 8, 7]
if(arr.indexOf(5) === -1){console.log("不存在")
}
if (arr.indexOf(9) > -1){console.log("存在,索引是:", arr.indexOf(9))
}

 

注意:string.indexOf()返回某个指定的字符串值在字符串中首次出现的位置。

1.该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。 
2. stringObject 中的字符位置是从 0 开始的。 
3. 查找字符串最后出现的位置,使用 lastIndexOf() 方法。

方法三:array.find(callback[, thisArg])

它的参数是一个回调函数,所有数组元素依次遍历该回调函数,直到找出第一个返回值为true的元素,然后返回该元素,否则返回undefined

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

  • 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。
  • 如果没有符合条件的元素返回 undefined 
    注意: find() 对于空数组,函数是不会执行的。 
    注意: find() 并没有改变数组的原始值。

// 返回第一个大于9的元素 // 10
[1, 5, 10, 15].find(function(value, index, arr) {return value > 9
})

 

// 查找 2, find会找出所有存在的 2 以及索引
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2]
arr.find(function(value, index, arr) {if(value === 2 ) {console.log("存在, 索引为:", index)    }
})

 

 方法四:array.findeIndex(callback[, thisArg])

 array.findIndex()和array.find()十分类似,返回第一个符合条件的数组元素的位置,如果所有元素都不符合条件,则返回-1。 
findIndex() 方法为数组中的每个元素都调用一次函数执行:

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

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

// 返回第一个大于9的元素的索引 // 2
[1, 5, 10, 15].findIndex(function(value, index, arr) {return value > 9
})

 如果没有符合条件的元素返回 -1:

//  如果没有符合条件的元素返回 -1
[1, 5, 10, 15].findIndex(function(value, index, arr) {return value > 20
})

 array.findIndex() 和 array.find(),这两个方法都可以发现NaN,弥补了array.indexOf()的不足。

[NaN].indexOf(NaN) // -1[NaN].findIndex(y => Object.is(NaN, y)) // 0

 

 方法五:array.some(callback[, thisArg])

some方法同样用于检测是否有满足条件的元素,如果有,则不继续检索后面的元素,直接返回true,如果都不符合,则返回一个false

参数说明:

  • array:必需参数,一个数组对象。

  • callbackfn:必需参数,一个接收量最多三个参数的函数。函数参数:

    参数描述
    currentValue必须。当前元素的值
    index可选。当前元素的索引值
    arr可选。当前元素属于的数组对象

    some() 方法会为 array 中的每个元素调用 callbackfn 函数,直到 callbackfn 返回 true,或直到到达数组的结尾。

  • thisArg:可选参数,可在 callbackfn 函数中为其引用 this 关键字的对象。如果省略 thisArg,则 undefined 将用作返回 false。

注意:

(1)some()方法不会对空数组进行检测

(2)some()方法不会改变原始数组

示例:

let arr = [1, 2, 3, 4, 5]let result = arr.some(el => el === 3) 
console.log(result) //true
if (result) {//do something...
}

const arr = [1, 2, 3, 4, 5]
const res = arr.some(item => item < 0)
console.log(res) // false

题外话: array.every(function(currentValue,index,arr), thisValue)

提到some()就不得不提到every():

  • every()方法用于检测数组中的所有元素是否都满足指定条件(该条件为一个函数)。
  • every()方法会遍历数组的每一项,如果有有一项不满足条件,则表达式返回false,剩余的项将不会再执行检测。如果遍历完数组后,每一项都符合条,则返回true

参数说明:

  • 第一个参数为一个回调函数,必传,数组中的每一项都会遍历执行该函数。
    currentValue:必传,当前项的值
    index:选传,当前项的索引值
    arr:选传,当前项所属的数组对象
  • 第二个参数thisValue为可选参数,回调函数中的this会指向该参数对象。

注意:

  • every() 不会对空数组进行检测
  • every() 不会改变原始数组
// 数组中的每个元素的值都要大于20的情况,最后才返回true
var arr = [10, 20, 30]
var flag = arr.every(function (a, b, c) {return a > 20
})
console.log(flag) //false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/190721.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 解决CameraView叠加2个以上滤镜拍照黑屏的BUG (二)

1. 前言 这段时间&#xff0c;在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位&#xff0c;在项目前期&#xff0c;的确为我们节省了不少时间。 但随着项目持续深入&#xff0c;对于CameraView的使用进入深水区&#xff0c;逐…

【项目管理】PMO技能树21项参照

导读&#xff1a;PMO技能树让你能够有全局视野&#xff0c;让你对照着检查自己的能力是否掌握。技能树提供了构建个人知识体系参照和地图导航&#xff0c;不至于迷失方向。 目录 1、PMO层次概览 2、技能树 2.1 项目管理流程 2.2 项目组合管理 2.3 风险管理 2.4 项目资源管…

算法:记忆化搜索

文章目录 记忆化搜索斐波那契数列 例题不同路径最长递增子序列猜数字大小矩阵中的最长递增路径 记忆化搜索的原理其实很简单&#xff0c;简单来说就是对暴力搜索的一些优化&#xff0c;因此整体上来讲难度不高 记忆化搜索 所谓记忆化搜索&#xff0c;直白来说就是一个带有备忘…

《轻购优品》新零售玩法:消费积分认购+众筹新玩法

《轻购优品》新零售玩法&#xff1a;消费积分认购众筹新玩法 引言&#xff1a;2023年开年已来&#xff0c;政府的工作报告提出“把恢复和扩大消费摆在优先位置”&#xff0c;并且把2023年定位为“消费提振年”&#xff0c;以“全年乐享全年盛惠”为主题多地政府共同发力&#x…

亚马逊云科技AI创新应用下的托管在AWS上的数据可视化工具—— Amazon QuickSight

目录 Amazon QuickSight简介 Amazon QuickSight的独特之处 Amazon QuickSight注册 Amazon QuickSight使用 Redshift和Amazon QuickSightt平台构建数据可视化应用程序 构建数据仓库 数据可视化 Amazon QuickSight简介 亚马逊QuickSight是一项可用于交付的云级商业智能 (BI…

架构师篇 DDD领域驱动设计篇

一 DDD领域驱动设计 1.1 领域驱动设计 领域驱动设计(英文&#xff1a;Domain-Driven Design&#xff0c;缩写DDD)是一种模型驱动设计的方法&#xff0c;领域驱动设计常以战略设计与战术设计来将整个领域展现的淋漓尽致&#xff0c;其作用范围既面向业务也面向技术。从战略角度…

PS学习笔记——视图调整

文章目录 图片拖动图片旋转图片缩放 视图只是我们在对图片进行操作时所看到的图片状态&#xff0c;并不会实际改变图片的属性。目的是方便我们在操作图片时有最舒服的体验 图片拖动 工具栏中有这样一个抓手工具(快捷键H)&#xff0c;选择这个抓手工具便可以在图片放大后能用鼠标…

代码随想录算法训练营第五十七天丨 动态规划part17

647. 回文子串 思路 动态规划 动规五部曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 如果大家做了很多这种子序列相关的题目&#xff0c;在定义dp数组的时候 很自然就会想题目求什么&#xff0c;我们就如何定义dp数组。 绝大多数题目确实是…

Leetcode——最长递增子序列

1. 题目链接&#xff1a;300. 最长递增子序列 2. 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&a…

F. Alex‘s whims Codeforces Round 909 (Div. 3) 1899F

Problem - F - Codeforces 题目大意&#xff1a;有q次询问&#xff0c;每次询问给出一个数x&#xff0c;要求构造一棵n个点的树&#xff0c;使得对于每次询问&#xff0c;树上都有一条简单路径的长度等于x&#xff0c;同时每次询问前可以对树进行一次操作&#xff0c;即将一个…

泛微E-Cology CheckServer.jspSQL注入漏洞(QVD-2023-9849) 复现

泛微E-Cology CheckServer.jspSQL注入漏洞(QVD-2023-9849) 复现 1.漏洞描述 泛微 Ecology OA 系统对用户传入的数据过滤处理不当&#xff0c;导致存在 SQL 注入漏洞&#xff0c;未经过身份认证的远程攻击者可利用此漏洞执行任意SQL指令&#xff0c;从而窃取数据库敏感信息。 …

使用ADS进行serdes仿真时,Tx_Diff中EQ的设置对发送端波形的影响。

研究并记录一下ADS仿真中Tx_Diff的EQ设置。原理图如下&#xff1a; 最上面是选择均衡方法Choose equalization method&#xff1a;Specify FIR taps&#xff0c;Specify de-emphasis和none。 当选择Specify de-emphasis选项时&#xff0c;下方可以输入去加重具体的dB值&#x…