[奇招] JS暴虐查找算法

作者:bound0 来源:经典论坛 时间:2008-07-06 21:17:00 

有过相关经验的朋友都知道,Jscript的效率毕竟有限,在数组中查找数据时如果用常规的算法来做执行起来会很慢。

例如在一个含500个字符串的data数组里,我们想要找到一个指定的字符(key),返回它的数组下标,如果用这样的算法:

CODE:

function usual_search(data,key)
{
var m=data.length
for(i=0;i<m;i++)
{if(data[i]==key)return i}
}


由于需要做多次的比较,运算起来会相当的慢。

本主题要介绍的是一种充分利用Jscript内置方法来实现在数组中查找数据的方法,由于借助Jscript内置方法,其效率要远优于上述常规算法。为了(诙谐|唬人)起见,我命其名为“JS暴虐查找法”。

这种查找法对于数组元素有一个要求:就是数组元素的内容不得包含半角逗号(,)及我们指定的某一个代置符号(例如,在下面的示例中,我们指定代置符号为一个制表符“┢”)。在事先构建、维护数组时要注意满足这一要求。

JS暴虐查找法的思路是非常简单的,原则只有一个,就是要“充分利用Jscript内置方法”:

我们首先利用 Array 对象的 toString() 方法产生一个包含数组元素的字符串,在这个字符串中各数组元素由半角逗号(,)分隔的,所以我们事先要求数组元素的内容不得包含半角逗号。

随后利用 String 对象的 replace() 方法将这个字符串中所包含的我们要找的关键字符串替换成我们指定的一种特殊符号(代置符号),一般选择一个不常用的字符来充当代置符号,在下面示例中我使用了一个制表符(┢),只要是能够确保不会在数组元素中出现的符号都可以充当代置符号。

接下来就是我们最暴虐的一步了,还是用 replace() 方法,去除半角逗号(,)和代置符号(┢)以外的所有字符。统统去干净以后这个字符串就变成了一串半角逗号之中包含着一个代置符号(这模样:,,,,,,,,,,,,,,,,┢,,,,,,,,,)。

最后,用 String 对象的 indexOf() 方法返回代置符号在这个字符串中的位置,而这个位置恰恰也就是在原来数组中的数组下标。

Jscript示例程序:

运行代码框


不应该忽略的是:是脚本执行非内置算法代码的低效率使得这个JS暴虐查找法有意义。

标签:算法,查找,数据,javascript
0
投稿

猜你喜欢

  • python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例

    2022-02-07 05:22:10
  • Python调用Matplotlib绘制振动图、箱型图和提琴图

    2022-02-08 05:56:09
  • python打印文件的前几行或最后几行教程

    2022-04-30 01:14:09
  • css:小技巧大问题,cellSpacing用css样式代替方法,其它样式类似解决!

    2009-10-04 20:35:00
  • 使用django的objects.filter()方法匹配多个关键字的方法

    2022-04-08 06:11:20
  • 使用FSO把文本信息导入数据库

    2007-09-27 20:20:00
  • JavaScript 数组方法filter与reduce

    2024-04-29 13:14:38
  • 解决python 文本过滤和清理问题

    2023-08-31 08:18:38
  • Python 从一个文件中调用另一个文件的类方法

    2022-02-22 23:36:35
  • 计算机科学中32个常用的基础算法

    2023-01-25 16:50:19
  • AJAX:如何处理书签和后退按钮

    2008-03-21 18:44:00
  • Python优化技巧之利用ctypes提高执行速度

    2022-01-26 09:13:04
  • 详解python使用canvas实现移动并绑定键盘

    2022-08-18 01:02:52
  • mysql中如何对列求和

    2024-01-16 12:28:48
  • PHP基于rabbitmq操作类的生产者和消费者功能示例

    2023-11-23 20:03:03
  • Python ORM框架Peewee用法详解

    2022-11-08 03:00:24
  • Django如何防止定时任务并发浅析

    2021-10-23 01:09:54
  • 修改月光博客网站中PHP常用正则表达式中出现的错误

    2024-05-03 15:35:35
  • MySQL 密码设置

    2024-01-28 11:53:59
  • Go 语言进阶freecache源码学习教程

    2023-08-06 03:05:20
  • asp之家 网络编程 m.aspxhome.com