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

常用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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值