`

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 . ...

    javascrip:遍历文件填充数组

    javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组

    Array-Practice:复习和练习javascript数组

    在JavaScript编程语言中,数组是一种非常重要的数据结构,它允许我们存储和操作多个值在一个单一的变量中。在这个“Array-Practice”项目中,我们将会深入理解和实践JavaScript数组的各种特性和方法,这对于提升你的...

    从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中处理数组的灵活性和效率,理解并熟练掌握它们对于提升编程能力至关重要。在实际开发中,根据具体需求选择合适的方法,可以简化代码,提高性能。

    js数组说明大全

    JavaScript 数组详细说明大全 JavaScript 中的数组是一种基本数据类型,用于存储一组相关的数据。数组可以存储各种类型的数据,包括数字、字符串、对象等。数组的使用非常广泛,以下是对 JavaScript 数组的详细说明...

    会改变数组的方法和不会的.pdf

    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"`。 除此...

    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...

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

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

    极少代码实现字符串数组对象嵌套数组等类型的去除空格

    在JavaScript开发中,处理数据时我们经常会遇到需要去除字符串、数组、对象以及嵌套数组中的空格情况。这些空格可能是不必要的,甚至可能导致逻辑错误。本文将深入探讨如何使用极少的代码来实现这类数据结构的去空格...

    JavaScript对象与数组参考大全

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

    js数组操作:三维数组去除空元素.pdf

    在实际项目中,我们经常会遇到一些复杂的数组操作问题,例如在树形结构中展示数据时,返回的三维数组中可能存在某些层数组为空,需要去除掉这些空数组,得到的数组为三层,并且每一层数组都不为空。那么如何去除三维...

Global site tag (gtag.js) - Google Analytics