`

比较JavaScript中的集合及其检索效率

阅读更多

     数组是JavaScript提供的一个内部对象,它是一个标准的集合,我们可以添加(push)、删除(shift)里面元素,我们还可以通过for循环遍历里面的元素,那么除了数组我们在JavaScript里还可以有别的集合吗?

    由于JavaScript的语言特性,我们可以向通用对象动态添加和删除属性。所以Object也可以看成是JS的一种特殊的集合。下面比较一下Array和Object的特性:

    Array:

    新建:var ary = new Array(); 或 var ary = [];
    增加:ary.push(value);
    删除:delete ary[n];
    遍历:for ( var i=0 ; i < ary.length ; ++i ) ary[i];

    Object:

    新建:var obj = new Object(); 或 var obj = {};
    增加:obj[key] = value; (key为string)
    删除:delete obj[key];
    遍历:for ( var key in obj ) obj[key];

    从上面的比较可以看出Object完全可以作为一个集合来使用,在使用Popup窗口创建无限级Web页菜单(3) 中我介绍过Eric实现的那个__MenuCache__,它也就是一个模拟的集合对象。

    如果我们要在Array中检索出一个指定的值,我们需要遍历整个数组:

 var keyword = ;
 for ( var i=0 ; i < ary.length ; ++i )
 {
     if ( ary[i] == keyword )
     {
         // todo
     }
 }  

   而我们在Object中检索一个指定的key的条目,只需要是要使用:

 var key = '';
 var value = obj[key];
 // todo
 

    Object的这个特性可以用来高效的检索Unique的字符串集合,遍历Array的时间复杂度是O(n),而遍历Object的时间复杂度是 O(1)。虽然对于10000次集合的for检索代价也就几十ms,可是如果是1000*1000次检索或更多,使用Object的优势一下就体现出来 了。在此之前我做了一个mapping,把100个Unique的字符mapping到1000个字符串数组上,耗时25-30s!后来把for遍历改成 了Object模拟的集合的成员引用,同样的数据量mapping,耗时仅1.7-2s!!!

    对于集合的遍历效率(从高到低):var  value  =  obj[key]; > for ( ; ; ) > for ( in )。效率最差的就是for ( in )了,如果集合过大,尽量不要使用for ( in )遍历。

分享到:
评论

相关推荐

    JavaScript中的集合及效率

    在探讨JavaScript中的集合及其效率时,我们首先要了解JavaScript语言的一些核心特性,尤其是关于对象、数组以及它们作为集合的使用方式。JavaScript中的对象(Object)和数组(Array)都是重要的数据结构,它们都...

    JavaScript数据结构算法.zip

    理解哈希冲突及其解决方法有助于提高数据存储和检索效率。 6. 字符串:JavaScript中的字符串是不可变的,这意味着每次修改字符串都会创建一个新的字符串对象。学习字符串的拼接、查找、替换等操作能帮助优化字符串...

    JavaScript王者归来part.1 总数2

     第2章 浏览器中的JavaScript  2.1 嵌入网页的可执行内容   2.2 赏心悦目的特效   2.3 使用JavaScript来与用户交互  2.4 绕开脚本陷阱 2.5 总结   第3章 开发环境和调试方法  3.1 我能用什么来编写脚本--...

    树形结构大集合

    下面我们将深入探讨这些树形结构及其在JavaScript中的应用。 1. **二叉树**:最基础的树形结构,每个节点最多有两个子节点,分为左子节点和右子节点。在JavaScript中,二叉树常用于实现查找、排序等功能,例如二叉...

    教务管理系统,AJAX,JAVAScript,

    接下来,我们将深入探讨这些关键技术及其在教务管理中的应用。 首先,AJAX是一种Web开发技术,它允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。这在教务管理系统中体现为用户无需等待...

    js里关于bow知识点.docx

    【标题】:JavaScript中的BOW模型及其应用 【描述】:本文主要介绍JavaScript中的BOW(Bag-of-Words)模型,以及如何将其应用于图像检索和分类。BOW模型是一种简化了的文本或图像表示方法,它忽略了顺序和上下文,...

    aa.rar_javascript_jsp_jsp sqlserver

    标题 "aa.rar_javascript_jsp_jsp_sqlserver" 暗示了这是一个关于使用JavaScript、JSP、SQL Server数据库和可能的开发环境Tomcat及MyEclipse进行项目开发的资源集合。下面将详细阐述这些技术及其在Web开发中的应用。...

    data_structure:用JavaScript开发的数据结构

    下面我们将深入探讨JavaScript中常见的数据结构及其应用场景。 1. 数组(Array): 数组是最基础的数据结构,用于存储一系列有序的元素。在JavaScript中,数组可以存储任意类型的数据,包括其他对象。数组提供了...

    ArcGIS_API_for_Javascript_开发教程

    - **查询检索**:包括查询任务、查找任务、识别任务等,用于获取地图中的信息。 - **服务器端渲染**:在服务器端进行渲染,可以减轻客户端的压力。 - **地址匹配**:通过地址匹配服务将地址转换为地理坐标。 - **...

    JavaScript中创建字典对象(dictionary)实例

    在JavaScript中,字典对象(dictionary)是一种用于存储键值对的数据结构,这使得我们能够通过一个唯一的键来快速检索对应的值。由于JavaScript原生的Array对象是一个用于存储一系列元素的线性集合,它并不直接支持...

    各种中文api

    例如,集合框架是Java编程中的重要部分,包括List、Set、Map等接口及其实现类,它们为数据存储和操作提供了强大支持。 这三份中文API文档对于初学者和有经验的开发者都极具价值,因为它们不仅提供了技术细节,还...

    MongoDB命令查询.txt

    其中查询命令是使用频率最高的一类,它允许用户按照指定条件从集合中检索文档。 ### `findOne()` 命令详解 #### 命令格式 `db.tablename.findOne({})` 是MongoDB中最基本的查询命令之一。其格式如下: ```...

    MongDB聚合与索引操作

    在本次实验中,我们将深入探讨MongoDB中的索引操作及其重要性,并通过实践来掌握如何有效地创建和使用索引以提高查询性能。 1. **理解MongoDB索引的用途**: - 索引是MongoDB中用于加速数据检索的一种数据结构。 ...

    FaceTest[存储过程和JSON及Jquery]动态生成表格及分页

    下面我们将详细探讨这三个关键组件及其在动态表格和分页中的应用。 1. 存储过程(Stored Procedures): 存储过程是数据库中预编译的SQL语句集合,它可以执行复杂的数据库操作。在动态生成表格时,存储过程通常...

    ssh框架面试题

    17. **cascade属性**:在Hibernate配置中,元素的cascade属性用于设置级联操作,如设置为'save-update',表示在保存或更新父bean时,会同时保存或更新集合中的对象。 18. **Hibernate中的Session游离态**:当...

    AJAX搜索引擎研究.pdf

    - 建立倒排索引,提高检索效率。 - **检索器的关键任务**: - 根据相关度评价策略,从索引库中筛选出最匹配的文档集合。 - **用户接口的设计**: - 展示查询结果,提供反馈机制。 #### 3. AJAX技术及其对搜索引擎...

    DataStructures:JS中的DS

    这里我们将深入探讨JavaScript中的数据结构及其应用。 1. 数组:数组是最常见的数据结构,用于存储一组有序的元素。在JavaScript中,数组是一种特殊的对象,可以容纳任意类型的值。它们可以通过索引来访问和修改...

    百度全文内容关健搜索,关键字高亮显示出来

    这个功能可以帮助用户快速定位到他们关心的信息,提高信息检索的效率。以下将详细讲解这一知识点及其实现原理。 首先,我们要理解什么是全文搜索。全文搜索是指在一个文档集合中,对用户输入的查询词进行全面的匹配...

Global site tag (gtag.js) - Google Analytics