常用js中数组元素搜索的方式

这篇博客详细介绍了JavaScript中数组搜索的方法,包括indexOf、lastIndexOf用于查找元素的索引,includes检查元素是否存在于数组中,find寻找满足特定条件的第一个元素,以及filter创建包含匹配条件的新数组。示例代码展示了各种方法的使用场景,帮助开发者更好地理解和运用这些数组操作技巧。

常用jjs中数组元素搜索的方式

indexOf/lastIndexOf

indexOf()、lastIndexOf()方法返回数组中值的第一个索引,如果没有匹配项,则返回-1,语法如下:

/**
* @function 在数组中查找元素并返回匹配的下标
* @description 方法返回数组中值的第一个索引,如果没有匹配项,则返回-1
* @param searchElement {all} 需要查找的元素
* @param fromIndex{int} 可选,从该下标后开始查找。
* @return 返回数组中值的第一个索引,没有匹配项返回-1
*/
arr.indexOf(searchElement[, fromIndex])

例:

const arr=[1,3,"hot","jxmaker",{name:"jxmaker",role:"admin",id:"999"}];
const index1=arr.indexOf(3);//index1=1(数组中3所在位置下标从0开始)
const index2=arr.indexOf("hots");//index2=-1(找不到)

indexOf与lastIndexOf的区别在于查找方式不同,一个从头向后开始找,一个从尾开始向前找

includes

includes()返回数组中是否存在该元素,存在返回true,否则返回false,语法如下:

/**
* @function 判断数组中是否存在指定元素
* @description 判断数组中是否存在指定元素,存在返回true,不存在返回false
* @param valueToFind {all} 需要查找的值
* @param fromIndex {int} 可选,从该下标后开始查找。
* @return 存在返回true,不存在返回false
*/
arr.includes(valueToFind[, fromIndex])

例:

const arr=[1,3,"hot","jxmaker",{name:"jxmaker",role:"admin",id:"999"}];
const isExists1=arr.includes(3);//true
const isExists2=arr.includes("hots");//false(找不到)

find

find()方法返回通过测试(函数内判断)的数组的第一个元素的值,方法为数组中的每个元素都调用一次函数执行,语法如下:

/**
* @function 在数组中查找元素
* @description 返回通过测试(函数内判断)的数组的第一个元素的值,未找到返回undefind
* @param callback {function} 测试条件函数,当数组中的元素在测试条件时返回 true 时, 函数返回符合条件的元素,之后的值不会再调用执行函数。若为空数组,callback函数不会执行,函数执行过程不会改变原数组的值
* @param thisValue {object} 可选。 传递给函数的值一般用 "this" 值,如果这个参数为空、 "undefined" 会传递给 "this" 值。
* @return 方法返回通过测试(函数内判断)的数组的第一个元素的值,未找到返回undefind
*/
arr.find(callback(element[, index[, array]])[, thisValue])

例:

const arr=[1,3,"hot","jxmaker",{name:"jxmaker",role:"admin",id:"999"}];
const obj1=arr.find(ele=>ele?.id==="999");//{name:"jxmaker",role:"admin",id:"999"}
const obj2=arr.find(ele=>ele==="3");//undefined(找不到,数组中的3为数字型,此处函数判断的为字符串类型3)

filter()

filter()方法返回新数组,新数组包含所有与函数条件匹配的值。如果没有匹配项,则返回空数组,语法如下:

/**
* @function 在数组中查找元素,返回新数组包含所有匹配的元素
* @description 在数组中查找元素,返回新数组包含所有匹配的元素
* @param callback {function} 测试条件函数,当数组中的元素在测试条件时返回 true 时为测试通过
* @param thisValue {object} 可选。 传递给函数的值一般用 "this" 值,如果这个参数为空、 "undefined" 会传递给 "this" 值。
* @return {args} 返回包含所有匹配元素的新数组
*/
arr.filter(callback(element[, index[, array]])[, thisValue])

例:

const arr=[1,3,"hot","jxmaker",{name:"jxmaker",role:"admin",id:"999"}];
const arrFind1=arr.find(ele=>ele?.id==="999" || ele===3);//[{name:"jxmaker",role:"admin",id:"999"},3]
const obj2=arr.find(ele=>ele==="33");//[](找不到,返回空数组)

filter有许多巧妙的用法,具体可以看廖雪峰的博客中的例子

使用linq.js中的where查找

我是.net起家的开发者,所以对linq有特殊的偏爱,经常使用以下方法

const arr=[1,3,"hot","jxmaker",{name:"jxmaker",role:"admin",id:"999"}];
Enumerable.from(arr)
                .where("ele=>ele!=null && ele.name=='999'")//匹配条件,可用字符串也可用callback函数
                .orderBy(function (ele) { return ele.id; })//排序方式,可用字符串也可用callback函数
                .toArray()//返回新数组包含匹配项,如果只要返回一条用single()、singleOrDefault(),匹配结果超过一条会报错,用first()、firstOrDefault()返回第一条,有多条匹配结果不会报错 
                .forEach(function (ele) {
                    document.write(ele.name+ "[" + ele.role+ "]"  "<br/>");
                });

使用此方法需要先引入linq.js文件
linq.js用于快捷进行花式查找、统计,提高编码速度,推荐使用。

注:网上很多linq.js的教程函数都已大写开头,不知是我使用版本问题还是其它原因(包括使用npm安装的版本),经测试,Enumerable对象中所有函数遵循驼峰命名法(小写字母开头)

更多linq.js使用方法:
https://www.cnblogs.com/sword-successful/archive/2014/11/25/4120946.html

该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用!## 项目备注1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用!## 项目备注1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值