常用的JS搜索算法有哪些

发布时间:2021-10-22 16:53:44 作者:iii
来源:亿速云 阅读:179

这篇文章主要介绍“常用的JS搜索算法有哪些”,在日常操作中,相信很多人在常用的JS搜索算法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”常用的JS搜索算法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.for循环搜索

代码实现如下:

const getFnRunTime = require('./getRuntime');   /**   * 普通算法-for循环版   * @param {*} arr    * 耗时:7-9ms   */  function searchBy(arr, value) {      let result = [];     for(let i = 0, len = arr.length; i < len; i++) {         if(arr[i] === value) {             result.push(i);         }     }     return result  }  getFnRunTime(searchBy, 6)

测试n次稳定后的结果如图:

常用的JS搜索算法有哪些  

2.forEach循环

基本思路和for循环类似:

/**   * 普通算法-forEach循环版   * @param {*} arr    * 耗时:21-24ms   */  function searchByForEach(arr, value) {     let result = [];     arr.forEach((item,i) => {         if(item === value) {             result.push(i);         }     })    return result }

耗时21-24毫秒,可见性能不如for循环(先暂且这么说哈,本质也是如此)。

3.while循环

代码如下:

/**   * 普通算法-while循环版   * @param {*} arr    * 耗时:11ms   */  function searchByWhile(arr, value) {      let i = arr.length,      result = [];     while(i) {         if(arr[i] === value) {             result.push(i);         }         i--;     }         return result }

可见while和for循环性能差不多,都很优秀,但也不是说forEach性能就不好,就不使用了。foreach相对于for循环,代码减少了,但是foreach依赖IEnumerable。在运行时效率低于for循环。但是在处理不确定循环次数的循环,或者循环次数需要计算的情况下,使用foreach比较方便。而且foreach的代码经过编译系统的代码优化后,和for循环的循环类似。

4.二分法搜索

二分法搜索更多的应用场景在数组中值唯一并且有序的数组中,这里就不比较它和for/while/forEach的性能了。

代码如下:

/**    * 二分算法    * @param {*} arr     * @param {*} value     */   function binarySearch(arr, value) {     let min = 0;     let max = arr.length - 1;          while (min <= max) {       const mid = Math.floor((min + max) / 2);          if (arr[mid] === value) {         return mid;       } else if (arr[mid] > value) {         max = mid - 1;       } else {         min = mid + 1;       }     }        return 'Not Found';   }

在数据量很大的场景下,二分法效率很高,但不稳定,这也是其在大数据查询下的一点小小的劣势。

5.哈希表查找

哈希表查找的使用场景:

在这我先给出一个最简版的hashTable,方便大家更容易的理解哈希散列:

/**  * 散列表  * 以下方法会出现数据覆盖的问题  */ function HashTable() {   var table = [];    // 散列函数   var loseloseHashCode = function(key) {     var hash = 0;     for(var i=0; i<key.length; i++) {       hash += key.charCodeAt(i);     }     return hash % 37   };    // put   this.put = function(key, value) {     var position = loseloseHashCode(key);     table[position] = value;   }    // get   this.get = function(key) {     return table[loseloseHashCode(key)]   }    // remove   this.remove = function(key) {     table[loseloseHashCode(key)] = undefined;   } }

该方法可能会出现数据冲突的问题,不过也有解决方案,由于这里涉及的知识点比较多,后期我会专门推出一篇文章来介绍:

使用web worker优化

通过以上的方法,我们已经知道各种算法的性能和应用场景了,我们在使用算法时,还可以通过web  worker来优化,让程序并行处理,比如将一个大块数组拆分成多块,让web  worker线程帮我们去处理计算结果,最后将结果合并,通过worker的事件机制传给浏览器,效果十分显著。

到此,关于“常用的JS搜索算法有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. 如何在JS中实现排序和搜索算法
  2. JS常用的数组方法有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

js

上一篇:如何使用Java 8的时间类

下一篇:Facebook开源安全工具osquery 是否支持Windows 10

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》