为了账号安全,请及时绑定邮箱和手机立即绑定

检查数组中是否存在元素

检查数组中是否存在元素

慕哥9229398 2019-07-29 10:58:20
检查数组中是否存在元素我现在用来检查这个功能如下:function inArray(needle,haystack){     var count=haystack.length;     for(var i=0;i<count;i++)     {         if(haystack[i]===needle){return true;}     }     return false;}有用。我正在寻找的是,是否有更好的方法来做到这一点。
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

ECMAScript 2016采用了includes()一种专门解决问题的阵列方法,因此现在是首选方法。

[1, 2, 3].includes(2);     // true

[1, 2, 3].includes(4);     // false

[1, 2, 3].includes(1, 2);  // false (second parameter is the index position in this array at which to begin searching)

截至2018年7月,几乎所有主流浏览器都已实现,如果您需要支持IE,则可以使用polyfill


查看完整回答
反对 回复 2019-07-29
?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

码:

function isInArray(value, array) {
  return array.indexOf(value) > -1;}

执行:

isInArray(1, [1,2,3]); // true

更新(2017年):

在遵循ECMAScript 2016(ES7)标准的现代浏览器中,您可以使用函数Array.prototype.includes,这样可以更容易地检查数组中是否存在项:

const array = [1, 2, 3];const value = 1;const isInArray = array.includes(value);console.log(isInArray); // true


查看完整回答
反对 回复 2019-07-29
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

只需使用indexOf

haystack.indexOf(needle) >= 0

如果要支持旧的Internet Explorer(<IE9),则必须包含当前代码作为解决方法

除非您的列表已排序,否则您需要将每个值与针进行比较。因此,您的解决方案indexOf都必须n/2平均执行比较。但是,由于它indexOf是一种内置方法,它可能会使用额外的优化,并且在实践中会稍微快一些。请注意,除非您的应用程序经常在列表中搜索(例如每秒1000次)或列表很大(例如100k条目),否则速度差异无关紧要。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 865 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信