`

JavaScript极速狂飙:大容量字符型数组的快速检索

    博客分类:
  • JAVA
阅读更多

JavaScript 在大容量数组的循环方面效率不尽人意,我曾经做过一个比对,与VBS的数组相比较,VBS的数组循环速度大致比JS要快一个数量级。JS数组在一般的编程当中我们也不会太去注意它的效率问题:才几十个元素的数组效率即使差点你也看不出来,但节点量一大,比如几千、比如上万个节点量的数组循环,那效率问题就成了首要考虑解决的问题了。大容量数组的检索大致有以下几个应用:select做combo box时的快速匹配、树的查询、表格table排序或者检索等。

    下面我来做一个测试,首先我先创建一个大容量的数组:

    <SCRIPT LANGUAGE="JavaScript">
    var n = 100000; //数组的最大容量
    var a = new Array();
    for(var i=0; i<n; i++)
    {
      a[i] = Math.random() +"";
    }
    </SCRIPT>

    这样我就创建了一个长度为 100000 的字符型数组,然后我再检索字符串以 0.9999 开始的字符串,并存入另一个数组中。

    <SCRIPT LANGUAGE="JavaScript">
    var n = 100000; //数组的最大容量
    var a = new Array();
    for(var i=0; i<n; i++)
    {
      a[i] = Math.random() +"";
    }

    var begin = new Date().getTime();
    var b = new Array();
    for(var i=0; i<n; i++)
    {
      if(a[i].indexOf("0.9999")==0)
      {
        b[b.length] = a[i];
      }
    }
    document.write("数组长度:"+ n);
    document.write("<br>传统循环法耗时 "+ (new Date().getTime() - begin)
    +" 毫秒!检索的结果:<strong title='"+ b.join("&#13;")
    +"'>检索到 "+ b.length +" 个记录!</strong>");
    </SCRIPT>

    这步操作我这里耗时都在2800毫秒左右,说明一下,这里的循环非常简单,只有一个 if 判断和一个赋值操作,非常简单,若这里的判断稍微复杂一些那它的耗时将是数量级的增大。那么对于这种问题有什么好的优化方案吗?答案当然是有的,否则我开这个贴子说的全是费话了。但是对于这个问题不能再使用我们的传统思维来优化,因为在传统的思维里已经找不出再好的写法了。

    解决的方案就是:先把数组join()成一个大字符串,然后用正则表达式对这个大字符串进行匹配检索。这个方法算是我的个人独创吧,在我写树的过程中想出的歪招,不过效率真的不赖。这个优化方案需要有一定的正则表达式功底。

<input id="count" value="50000" size="7" maxlength="6">
<input type="button" value="数组初始华" onclick="txt.innerHTML = array_init()"><br>
<input type="button" value="传统循环" on

欢迎光临学网,收藏本篇文章 [1] [2]

$False$


click="txt.innerHTML += method_for()">
<input type="button" value="正则匹配" onclick="txt.innerHTML += method_regexp()">
<div id="txt"></div>

<SCRIPT LANGUAGE="JavaScript">
var txt = document.getElementById("txt");
var a = new Array();

function array_init()
{
    var n = parseInt(document.getElementById("count").value);
    a.length = 0;
    for(var i=0; i<n; i++)
    {
      a[i] = Math.random() +"";
    }
    return "数组长度:"+ n;
}

function method_for()
{
    var n = a.length;
    var begin = new Date().getTime();
    var b = new Array();
    for(var i=0; i<n; i++)
    {
      if(a[i].indexOf("0.9999")==0)
      {
        b[b.length] = a[i];
      }
    }
    return ("<br>传统循环法耗时 "+ (new Date().getTime() - begin)
    +" 毫秒!检索的结果:<strong title='"+ b.join("&#13;")
    +"'>检索到 "+ b.length +" 个记录!</strong>");
}

function method_regexp()
{
    var begin = new Date().getTime();
    var b = new Array();
    var s = a.join("\x0f");
    var r = new RegExp().compile("0\\.9999\\d+", "g");
    b = s.match(r);   s = "";
    return ("<br>正则匹配法耗时 "+ (new Date().getTime() - begin)
    +" 毫秒!检索的结果:<strong title='"+ b.join("&#13;")
    +"'>检索到 "+ b.length +" 个记录!</strong>");
}
</SCRIPT>

    大家可以测试一下,上面两种方法之间的效率到底相差多少!代码是死的,人是活的,换一种思维换一种模式,效率将大相径庭。

    这一招我是花了好多脑筋才想出来的招,真有点舍不得放出来,现在就拿它恭贺大家2006新的一年的开始吧。

 

资料来源:学网(www.xue5.com),原文地址:http://www.xue5.com/itedu/200802/102292.html

分享到:
评论

相关推荐

    JavaScript:数组与字符串操作教程.docx

    JavaScript:数组与字符串操作教程.docx

    JavaScript:数组与字符串操作教程

    ### JavaScript:数组与字符串操作教程 #### 一、变量与数据类型 在JavaScript中,变量是用来存储数据值的重要工具。由于JavaScript是一种弱类型语言,因此在声明变量时无需明确指定其类型,变量的类型会根据所赋...

    JavaScript常用数组、字符串、Object方法

    JavaScript中常用的数组方法如下: - push():向数组末尾添加一个或多个元素,并返回新的长度。 - pop():删除并返回数组的最后一个元素。 - unshift():向数组开头添加一个或多个元素,并返回新的长度。 - ...

    deeks:从对象和对象数组中检索所有键和嵌套键

    脸颊-深度对象密钥提取 从对象和对象数组中检索所有键和嵌套键。正在安装npm install --save deeks 例子: let keys = require ( 'deeks' ) ,docPath = require ( 'doc-path' ) ;let generatedKeys = keys . ...

    查询一个指定字符在数组里的索引,返回索引

    当我们需要在数组中查找特定的字符并获取其位置时,我们通常会涉及到“查询一个指定字符在数组里的索引”的操作。这个过程通常通过遍历数组来完成,也可以利用已有的内置函数或方法,具体取决于所使用的编程语言。 ...

    从C ++创建JavaScript数组和其他对象

    本主题探讨的是如何从C++代码中创建JavaScript数组和其他对象,并将这些对象传递给JavaScript环境。这个过程通常涉及到诸如Windows API、ATL(Active Template Library)、WTIL(Windows Template Library)以及COM...

    JavaScript数组对象JSON学习笔记

    ### JavaScript 数组对象 JSON 学习笔记 #### 一、JavaScript 数组操作 在 JavaScript 中,数组是一种常用的数据结构,用于存储多个值。本部分主要介绍如何创建数组、访问数组元素以及对数组进行各种操作。 #####...

    javascript数组

    ### JavaScript 数组详解 #### 一、数组的基本操作 ##### 1. 数组的创建 在 JavaScript 中,可以通过多种方式创建数组。以下是三种常见的创建数组的方法: - **使用 `new Array()` 构造函数**: - **无参数**:`...

    JavaScript中数组的22种方法必学(推荐)

    在JavaScript中,数组作为一种...这些方法极大地提高了我们在JavaScript中处理数组的灵活性和效率,理解并熟练掌握它们对于提升编程能力至关重要。在实际开发中,根据具体需求选择合适的方法,可以简化代码,提高性能。

    Javascript基础之数组的用法_.docx

    在JavaScript中,数组是一种强大的数据结构,用于存储和操作多个数据项。JavaScript数组与其他编程语言中的数组有许多共同点,但也有一些独特的特点。以下是对数组用法的深入解析: 首先,创建JavaScript数组有两种...

    concat-typed-array:连接n个类型数组

    连续类型数组 连接n个类型数组。 基于。 安装 npm install concat-typed-array 用法 import concatTypedArray from "concat-typed-array" ; concatTypedArray ( Uint8Array , Uint8Array . of ( 1 , 2 ) , Uint8...

    JavaScript如何删除数组元素!

    在JavaScript中,数组是一种常用的数据结构,用于存储一系列的值。有时我们可能需要根据特定条件或索引从数组中删除元素。本篇文章将详细介绍几种在JavaScript中删除数组元素的方法,帮助开发者更好地理解和应用这些...

    JavaScript中的Array 对象(数组对象)_.docx

    - 将数组元素组合成字符串:默认情况下,数组元素由逗号分隔。可以提供一个可选的参数,指定用于分隔元素的字符。例如,`arr.join()`返回`"jone,Grrgy,john"`,而`arr.join("-")`返回`"jone-Grrgy-john"`。 除此...

    JavaScript程序设计-JavaScript数组.pptx

    JavaScript还提供其他数组操作方法,如`unshift()`在数组开头添加元素,`slice()`截取数组的一部分,`splice()`添加/删除数组元素,`concat()`连接两个或更多的数组,以及`indexOf()`和`lastIndexOf()`查找数组中...

    ndarray:javascript中的多维数组

    数组javascript中的多维数组安装 npm install tiny-ndarray要求 var NDArray = require('tiny-ndarray');用法 // Create your array by passing in the size of each dimension// Here we're creating a 3D array of...

    javascript 常用方法总结

    JavaScript 是一种广泛应用于 Web 开发的编程语言,提供了许多实用的方法来操作字符串和数组。下面将对 JavaScript 中常用的字符串和数组方法进行总结。 字符串方法 1. `charAt()`: 返回在指定位置的字符。 2. `...

    经典ASP读取JSON字符串/生成JSON对象,数组对象等。

    这篇关于“经典ASP读取JSON字符串/生成JSON对象,数组对象等”的知识将详细介绍如何在ASP环境中处理JSON数据。 1. **JSON对象与数组的结构**: JSON对象以大括号{}表示,键值对之间用逗号分隔。键必须是字符串,用...

    JavaScript对象与数组参考大全

    在这份"JavaScript对象与数组参考大全"中,我们将深入探讨JavaScript的核心概念——对象和数组,它们是JavaScript编程的基础,也是理解和编写复杂应用的关键。 一、JavaScript对象 1. 对象定义:JavaScript对象是一...

    数组乱序 javascript

    数组乱序 javascript

    JsArrayMethods:Javascript中高阶数组方法的代码示例

    在JavaScript中,数组方法是处理和操作数组的关键工具。这些方法极大地提高了开发效率,使得代码更加简洁、高效。本文将深入探讨JavaScript中的高阶数组方法,并通过代码示例来阐述它们的工作原理和应用场景。 1. *...

Global site tag (gtag.js) - Google Analytics