数组是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 )遍历。
分享到:
相关推荐
首先,我们来谈谈数组(Array)。数组是JavaScript中最常用的数据结构,用于存储一系列有序的元素,可以是任意类型,包括数字、字符串、对象等。数组的索引是从0开始的,可以通过索引来访问或修改数组中的元素。数组...
在JavaScript中,对象可以被视为键值对的集合。对象中的每个属性或方法都通过一个唯一的名称(属性名)进行标识。这些属性名可以是任何字符串,包括空字符串。对象使用大括号`{}`来定义。可以通过点符号(`.`)或方...
尽管Navigator对象中的plugins[]数组最早由IE4定义,但实际上,在IE4中这个数组始终为空,因为它不支持插件和Plugin对象。在Navigator对象的属性中,appCodeName、appName、appVersion等属性可以返回浏览器的基本...
接着,我们来谈谈JavaScript的基础对象。这些对象包括但不限于Array、String、Number、Boolean、Object、Date、RegExp等。例如,Array对象提供了丰富的数组操作方法,如push、pop、slice、splice等,而String对象则...
这些库通常被用来提供各种实用函数,如数组操作、对象处理、字符串操作等,但在ES6及以后的版本中,JavaScript已经引入了许多原生功能,使得开发者不再需要依赖这些额外的库。 首先,我们来谈谈lodash和underscore...
接着,我们来谈谈JavaScript的对象和原型。对象是键值对的集合,可以看作是关联数组。原型是JavaScript中的一个重要机制,它允许对象间共享属性和方法。每个JavaScript对象都有一个隐含的原型对象,可以通过__proto_...
数组是一系列相同类型元素的集合,它们在内存中连续存储。数组名实际上是一个指向其首元素的指针,因此可以进行指针运算。例如,`int arr[10];`声明了一个包含10个整数的数组,`arr`指向数组的第一个元素。数组的...
这些方法类似于JavaScript数组的`forEach`、`map`、`filter`方法,允许开发者遍历、映射或过滤元素集合,并对它们执行操作。 接下来,我们谈谈jQuery的动画方法。jQuery中的`.show()`和`.hide()`方法用于显示和隐藏...
Set是一个不允许重复值的集合,可以很方便地去除数组中的重复元素。配合拓展运算符(`...`),可以快速创建一个新的不含重复元素的数组。 ```javascript const removeDuplicateItems = arr => [...new Set(arr)]; ...
在处理数组或集合时,Lambda表达式常与高阶函数(如`map`、`filter`和`reduce`)结合使用,以进行数据处理和转换。 在"老鼠尾巴"案例中,可能涉及到使用Canvas API绘制动态的鼠尾效果。通过函数式编程,我们可以...
例如,`ComputeHash`方法可以接受一个字节数组作为输入,返回一个表示哈希值的字节数组。 总结一下,C#提供的加密解密工具集包括了对JSON对象的处理、对称加密的DES、非对称加密的RSA以及哈希算法SHA。这些工具在...
JavaScript数组是动态的,意味着它们可以根据需要增长或缩短。 通过上面的介绍,我们可以对JavaScript的数据类型有一个大致的了解。在学习和使用JavaScript的过程中,理解这些数据类型将对编写有效的代码和解决实际...
首先,我们来谈谈JavaScript中的数字类型。在JavaScript中,数字可以是整数或浮点数,而"零"(0)是数字类型的一个基本元素。在数学运算中,零扮演着特殊的角色,如作为乘法的吸收元(任何数与0相乘结果为0)和加法...
数组在ES6中可以使用扩展运算符进行复制和合并,以及使用fill方法填充特定值。此外,使用Array.from()可以从类似数组或可迭代对象创建新的数组。栈和队列可以通过数组的push和pop(栈)或unshift和shift(队列)方法...
首先,我们来谈谈JavaScript的基础语法。变量在JavaScript中是动态类型的,这意味着你无需提前声明其类型,可以随时改变变量的值和类型。例如,`var age = 25;` 和 `age = "twenty-five"` 是完全合法的。JavaScript...
JavaScript中的对象是键值对的集合,可以看作是关联数组。我们可以使用对象字面量语法创建对象,也可以通过构造函数创建。此外,JavaScript还提供了原型链和继承机制,使得对象之间可以共享属性和方法,实现代码复用...
JavaScript中的数组支持多种操作,如push、pop、shift、unshift等。 2. 链表(Linked List):非连续存储,每个元素包含数据和指向下一个元素的引用。链表分为单向链表和双向链表。 3. 队列(Queue):先进先出...
在JavaScript编程语言的世界里,"Day03"可能代表着学习旅程中的第三天,这通常意味着我们将深入探索更多关于JS的基础知识。在这个阶段,开发者通常会接触到变量、数据类型、操作符、控制流程以及函数等核心概念。 ...
总结来说,AngularJS中的orderBy指令和filter指令是数据处理的重要工具,它们使得开发者可以很容易地在视图层展示经过排序和过滤的数据集合。通过合理运用这两个指令,我们可以使前端界面更加动态,响应用户的不同...