js数组的findIndex和indexOf对比
findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。
findIndex() 方法为数组中的每个元素都调用一次函数执行:
- 当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。
- 如果没有符合条件的元素返回 -1
注意: findIndex() 对于空数组,函数是不会执行的。
注意: findIndex() 并没有改变数组的原始值。
代码实例:
indexOf() 方法可返回数组中某个指定的元素位置。
该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。
如果在数组中没找到指定元素则返回 -1。
代码实例:
index
/ Production steps of ECMA-262, Edition 5, 15.4.4.14
// Reference: http://es5.github.io/#x15.4.4.14
if (!Array.prototype.indexOf) {Array.prototype.indexOf = function(searchElement, fromIndex) {var k;// 1. Let O be the result of calling ToObject passing// the this value as the argument.if (this == null) {throw new TypeError('"this" is null or not defined');}var O = Object(this);// 2. Let lenValue be the result of calling the Get// internal method of O with the argument "length".// 3. Let len be ToUint32(lenValue).var len = O.length >>> 0;// 4. If len is 0, return -1.if (len === 0) {return -1;}// 5. If argument fromIndex was passed let n be// ToInteger(fromIndex); else let n be 0.var n = +fromIndex || 0;if (Math.abs(n) === Infinity) {n = 0;}// 6. If n >= len, return -1.if (n >= len) {return -1;}// 7. If n >= 0, then Let k be n.// 8. Else, n<0, Let k be len - abs(n).// If k is less than 0, then let k be 0.k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);// 9. Repeat, while k < lenwhile (k < len) {// a. Let Pk be ToString(k).// This is implicit for LHS operands of the in operator// b. Let kPresent be the result of calling the// HasProperty internal method of O with argument Pk.// This step can be combined with c// c. If kPresent is true, then// i. Let elementK be the result of calling the Get// internal method of O with the argument ToString(k).// ii. Let same be the result of applying the// Strict Equality Comparison Algorithm to// searchElement and elementK.// iii. If same is true, return k.if (k in O && O[k] === searchElement) {return k;}k++;}return -1;};
对比:
1、findIndex()和indexOf方法实现都是通过循环遍历查找。
2、findIndex()的应用场景要比indexOf广泛一些,可以查找大于等于小于,表达式可以随便写,indexOf就只能在第一层查找相等的值。
3、findIndex()实际上相当于一个for循环,只不过找到了你不需要自己退出。
js数组的findIndex和indexOf对比相关推荐
- js 数组 堆栈 和 buckets 效率 对比
原文链接: js 数组 堆栈 和 buckets 效率 对比 上一篇: vue 算法可视化 汉诺塔加强版 下一篇: mnist 转换为record 使用tf data 转换 读取 训练 定义和用法 s ...
- Js数组灵魂拷问之indexof 和sort
function flat(arr){arr = arr.flat(Infinity);let arr1=[]for(let i=0;i<arr.length;i++){if(arr1.inde ...
- js数组遍历方法总结与对比
目录 总结 一.常规方法 for的4种写法 while 二.ES6方法 for...of,得到每项元素 for...in,得到的是数组索引 三.数组实例上的遍历方法 forEach(),得到每一项元素 ...
- js数组中indexOf和findIndex的区别
1. indexOf 语法 arr.indexOf(searchElement[, fromIndex]) 参数 searchElement 要查找的元素 fromIndex (可选 ) 开始查找 ...
- JS中集合对象(Array、Map、Set)及类数组对象的使用与对比
JS中集合对象(Array.Map.Set)及类数组对象的使用与对比 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java ...
- js 数组遍历方法详解(map、filter、find、findIndex、reduce)
目录 前言 map map是什么 map方法的结构及入参 语法糖 map一般不改变原数组 filter 说明 例子 find 和 findIndex 说明 例子 reduce 说明 例子 尾言 前言 ...
- js数组查找方法 find() findIndex() - Kaiqisan
js数组查找方法 find() findIndex() ヤッハロー.Kaiqisanすうう.一つふつうの学生プログラマである,今天继续讲讲数组查询方法,,这俩方法更加适合于数组. 没错,就是数组专用的 ...
- JS数组去重之indexOf去重
思路:创建一个新数组newArr,遍历旧数组arr,拿旧数组的数arr[i]来查询新数组,如果新数组里没有这个数,则将这个数添加到新数组里,查询新数组用的是indexOf,是否等于-1,等于则说明新数 ...
- 你真的了解JS数组的那些方法吗?
寄语: JS数组的方法非常的丰富和琐碎,学习和使用过程中总是需要反复的记忆.查看文档,但作为JS基础这样真的不应该,我们应该把它记得滚瓜烂熟,深入理解才对. 但是要怎样才能做到呢?这正是我也本文的初衷 ...
最新文章
- 本科计算机专业考北大软微,2022北京大学软微学院计算机智能科技考研必看经验指导(含复试解析)...
- 方法传递java_Java 程序将方法作为参数传递给其他方法
- JavaScript优化基本篇
- ITK:写一个TIFF图像
- 标签的宽度_27 表格标签
- Video4Linux
- android 编译luajit,Android 嵌入 LuaJIT 的曲折道路
- 教你如何一篇博客读懂设计模式之—--工厂模式
- 底部按钮吸附_知乎的药丸按钮(二)我的 iOS 实现
- paip.复制文件 文件操作 api的设计uapi java python php 最佳实践
- 双创项目_宫颈癌风险智能检测(2)
- 康托尔集合论-罗素悖论-公理化集合论-不完全性定理
- 修改cnn梯度下降——MEO方法应用
- 【学习笔记】人工智能相关概念
- 根据经纬度定位百度地图(带图片的)
- 专升本英语——语法知识体系(入门部分)
- 既然Talk is cheap, 那么就用代码教你如何进行正交设计
- SAAS产品有哪些优缺点?
- 从《沙丘》到《三体》,科幻IP影视化改编究竟难在哪?
- 记录一下自己学习网络安全的过程