`

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

分享到:
评论

相关推荐

    本文详细介绍了Vue.js中`class`和`style`绑定的三种方式:字符串形式、数组形式和对象形式

    本文详细介绍了Vue.js中`class`和`style`绑定的三种方式:字符串形式、数组形式和对象形式。`class`绑定适用于动态控制CSS类,其中字符串形式用于单个动态样式,数组形式用于多个动态样式,对象形式用于固定样式但...

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

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

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

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

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

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

    javascrip:遍历文件填充数组

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

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

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

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

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

    JavaScript数组对象JSON学习笔记

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

    以任意指定的字符分割一个字符串,然后保存在字符串数组中

    这个过程将一个字符串分解成一个字符串数组,每个数组元素对应原字符串中的一个片段。在本教程中,我们将深入探讨如何在不同的编程语言中实现这一功能。 首先,我们来看Python,它是一种广泛使用的高级编程语言,以...

    javascript数组

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

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

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

    JavaScript数组操作指南:创建、索引、遍历与排序详解

    内容概要:本文档详述了JavaScript中的数组概念及其主要操作方法。首先介绍数组作为一组数据集合的概念,并指出了它可以容纳任意类型的数据以及创建数组的方法(new运算符及数组字面量)。其次,讲解了如何用索引...

    JavaScript数组用法详解

    JavaScript 数组的元素可以是任何类型,包括数字、字符串、对象、函数等。数组的长度可以动态地变化,可以通过 push()、pop()、shift()、unshift() 等方法来添加或删除元素。 JavaScript 数组有多种创建方式,...

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

    JavaScript数组是编程中经常使用的一种数据结构,它提供了一系列的方法来操作和处理数组。根据这些方法是否改变原数组,可以将它们分为两类:会改变原数组的方法和不会改变原数组的方法。明确这一点对于编程来说至关...

    排序函数(数字或字符串数组排序)

    为普通数组和对象数组排序,对象数组排序时,可指定排序所依据的对象属性,汉字将以汉语拼音为序。

    Chrome V8引擎中的JavaScript数组实现分析与性能优化.pdf

    Chrome V8引擎中的JavaScript数组实现分析与性能优化 在本文中,我们将对Chrome V8引擎中的JavaScript数组实现进行深入分析,并探讨如何通过优化JavaScript数组的使用方式来提高程序效率。在实际应用中,JavaScript...

    JavaScript如何删除数组元素!

    在JavaScript中,数组是一种常用的数据结构,用于存储一系列的值。有时我们可能需要根据特定条件或索引从数组中删除元素。本篇文章将详细介绍几种在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...

Global site tag (gtag.js) - Google Analytics