数组五种查询条件方法(find、findindex、indexOf、lastindexOf 、includes)

本文介绍了数组的几种查询方法。find()返回满足测试函数的首个元素值;findIndex()返回满足测试函数的首个元素索引,不存在则为 -1;indexOf()返回给定元素首个索引,不存在为 -1;lastIndexOf()从后往前找指定元素最后索引,不存在为 -1;includes()判断数组是否含指定值,返回布尔值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一、find() 方法返回数组中满足提供的测试函数的第一个元素的值。

语法: arr.find(callback[, thisArg])

例一、find()方法 查找数组中第一个大于等于15的元素

var num = [10,3,5,15,100,1].find(function(elem, index){    
    return elem>=15;
});
console.log(num)     // 15

方法二、findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。

语法: arr.findIndex(callback[, thisArg])

例二、findIndex() 查找数组中第一个大于等于15的元素的位置(索引)

var num = [10,3,5,15,100,1].findIndex(function(elem, index){    // 15
    return elem>=15;
});
console.log(num)     // 3

方法三、indexOf()方法返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回-1。

语法: arr.indexOf(searchElement)
arr.indexOf(searchElement[, fromIndex = 0])

例三、indexOf () 查找5所在的位置,默认索引位置从零开始

[0,1,2,3,4,5,6].indexOf(5);    // 5    从索引0的位置往后查找
[0,1,2,3,4,5,6].indexOf(5,5);  // 5
[0,1,2,3,4,5,6].indexOf(5,10); // -1   从索引10的位置往后查找
 

方法四、lastIndexOf() 方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex 处开始。

语法: arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1])

例四、lastIndexOf() 查找5所在的位置,默认索引位置当前数组长度减一

[0,1,2,3,4,5,6].lastIndexOf(5);       // 5   从索引位置数组长度减一向前查找
[0,1,2,3,4,5,6].lastIndexOf(5, 6);    // 5
[0,1,2,3,4,5,6].lastIndexOf(5, 10);   // 5
[0,1,2,3,4,5,6].lastIndexOf(5, 1);    // -1   从索引1的位置向前查找

方法五、includes() 方法用来判断当前数组是否包含某指定的值,如果是,则返回 true,否则返回 false。

语法: arr.includes(searchElement)
arr.includes(searchElement, fromIndex)

例五、includes

[0,1,2,3,4,5,6].includes(5);                 // true     从索引0位置往后查找是否存在5元素,是
[0,1,2,3,4,5,6].includes(10);                // false
[0,1,2,3,4,5,6].includes(5,10);              // false    从索引10位置往后查找是否存在10元素,否
<think>我们需要总结JavaScript中字符串和数组中查找元素位置(类似indexOf功能)并向下取整(或类似操作)的所有常用方法。注意:问题中提到了“indexOf”和“Math.floor”,但这两者通常不直接一起使用。indexOf返回的是整数索引(如果找到)或-1(如果没找到)。而Math.floor是向下取整,可能用于其他数值处理。因此,我们重新理解问题:可能是在查找元素位置(返回整数)的方法,或者是在需要整数索引的场景下使用的方法。以下我们将总结:1.字符串和数组中用于查找元素位置的方法(返回整数索引)。2.另外,如果问题原意是“如何获取整数索引”,那么这些方法本身返回整数(除了找不到返回-1),所以不需要额外处理。但若涉及浮点数,则需要取整,这种情况较少见。但根据问题描述,我们主要总结返回整数索引的查找方法。一、字符串的查找方法(返回整数索引):1.indexOf(searchValue[,fromIndex]):返回第一次出现指定值的索引,没有则返回-1。2.lastIndexOf(searchValue[,fromIndex]):返回指定值最后出现的位置,没有则返回-1。3.search(regexp):接受正则表达式,返回匹配到的第一个索引,没有则返回-1(不支持从指定位置开始)。4.charAt(index):返回指定索引处的字符,但不用于查找字符的索引(反向操作)。5.另外,ES6新增:includes()返回布尔值,不返回索引。startsWith()和endsWith()返回布尔值,不返回索引。二、数组的查找方法(返回整数索引):1.indexOf(searchElement[,fromIndex]):返回在数组中找到给定元素的第一个索引,不存在则返回-1。2.lastIndexOf(searchElement[,fromIndex]):返回指定元素在数组中最后一个的索引,不存在则返回-1。3.findIndex(callback[,thisArg]):返回满足回调函数的第一个元素的索引,没有则返回-1(ES6)。4.find(callback[,thisArg]):返回第一个满足条件的元素(不是索引,但有时我们通过它再获取索引,不过直接使用findIndex更好)。5.其他:Array.prototype.keys()返回索引的迭代器,但通常用于遍历。三、特殊需求:当需要取整的情况有时我们可能从其他非整数索引的查找方法(如通过计算得到索引)中获取浮点数,然后需要取整。此时可以使用:Math.floor:向下取整Math.ceil:向上取整Math.round:四舍五入Math.trunc:去掉小数部分(ES6)或者使用位运算符(如~~或|0)进行取整,但需要注意只适用于32位整数。但是,上述取整方法通常不直接与indexOf等查找方法一起使用,因为查找方法返回的就是整数。因此,我们主要总结查找方法,取整方法作为补充。示例代码:字符串示例:```javascriptconststr="Hello,world!";console.log(str.indexOf('o'));//4console.log(str.lastIndexOf('o'));//8console.log(str.search(/o/));//4```数组示例:```javascriptconstarr=[1,2,3,4,5,4,3];console.log(arr.indexOf(3));//2console.log(arr.lastIndexOf(3));//6console.log(arr.findIndex(x=>x>3));//3(第一个大于3的元素是4,索引为3)```取整示例:```javascript//假设我们有一个浮点数索引,需要取整constfloatIndex=3.7;console.log(Math.floor(floatIndex));//3console.log(Math.ceil(floatIndex));//4console.log(Math.round(floatIndex));//4console.log(Math.trunc(floatIndex));//3console.log(floatIndex|0);//3(32位整数)```总结:查找索引的方法indexOf,lastIndexOf,search(字符串),findIndex数组)等。取整的方法:Math.floor,Math.ceil,Math.round,Math.trunc以及位运算。注意:位运算取整会将数字转换为32位整数,因此对于超出32位整数范围的数字(大于2147483647或小于-2147483648)会出错。如果问题是在非整数索引的查找(比如二分查找中可能得到浮点中间值)然后需要取整,那么我们可以使用这些取整方法。但标准查找方法返回的都是整数。因此,我们回答的重点是:总结查找索引的方法和取整方法。相关问题:</think>### JavaScript 中获取索引位置并向下取整的常用方法总结 #### 1. 字符串/数组的索引查找方法 这些方法返回整数索引,无需额外处理: ```javascript // 字符串方法 const str = "Hello World"; str.indexOf("o"); // 4 (首次出现位置) str.lastIndexOf("o"); // 7 (末次出现位置) str.search(/o/); // 4 (正则匹配位置) // 数组方法 const arr = [10, 20, 30, 20]; arr.indexOf(20); // 1 (首次出现位置) arr.lastIndexOf(20); // 3 (末次出现位置) arr.findIndex(el => el > 15); // 1 (首个满足条件的索引) ``` #### 2. 需要显式取整的场景及方法 当处理浮点数索引时,常用取整方法: ```javascript const floatIndex = 3.75; // 方法1: Math.floor (向下取整) Math.floor(floatIndex); // 3 // 方法2: 按位或 |0 (32位整数截断) floatIndex | 0; // 3 // 方法3: 双波浪线 ~~ (双按位非) ~~floatIndex; // 3 // 方法4: parseInt (解析整数部分) parseInt(floatIndex); // 3 // 方法5: Math.trunc (移除小数部分) Math.trunc(floatIndex); // 3 // 方法6: 位右移 0 (32位整数截断) floatIndex >> 0; // 3 ``` #### 3. 特殊场景处理方法 **场景1:处理未找到情况(返回-1)** ```javascript const index = str.indexOf("x"); if (index !== -1) { // 找到时的处理 } ``` **场景2:安全获取嵌套属性索引** ```javascript const data = { items: ["a", "b", "c"] }; const index = data?.items?.indexOf("b") ?? -1; // 1 ``` **场景3:类数组对象转换** ```javascript function getIndex() { return [...arguments].indexOf("target"); } getIndex("a", "target", "c"); // 1 ``` #### 4. 方法性能对比 | 方法 | 速度排名 | 特点 | |---------------|---------|------------------------------| | `index \| 0` | 最快 | 仅限32位整数范围 | | `~~index` | 快 | 同按位或,更简洁 | | `Math.floor` | 中等 | 标准方法,处理负数行为不同 | | `Math.trunc` | 中等 | ES6新增,直接截断小数 | | `parseInt` | 较慢 | 需字符串转换,处理非数字安全 | #### 5. 使用建议 1. **优先使用原生索引方法**:`indexOf`/`findIndex` 等已返回整数 2. **高性能场景**:使用 `|0` 或 `~~` 进行取整 3. **代码可读性**:优先使用 `Math.floor` 或 `Math.trunc` 4. **ES6+环境**:推荐 `Math.trunc` 处理负数更准确 #### 示例:综合使用 ```javascript // 查找元素位置并向下取整 function getFloorIndex(arr, value) { const rawIndex = arr.findIndex(el => el >= value); return rawIndex !== -1 ? Math.floor(rawIndex) : -1; } // 使用 const prices = [10.2, 20.5, 30.7]; getFloorIndex(prices, 15); // 1 (20.5的索引) ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值