Array【数组】和Object【对象】的特性比较
数组是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完全可以作为一个集合来使用。
如果我们要在Array中检索出一个指定的值,我们需要遍历整个数组:
var keyword = “keyword”;
for ( var i=0 ; i < ary.length ; i++ ) {
if ( ary[i] == keyword ) {
// todo
}
}
而我们在Object中检索一个指定的key的条目,只需要是要使用:
var key = “key”;
var value = obj[key];
// todo
Object的这个特性可以用来高效的检索Unique的字符串集合,遍历Array的时间复杂度是O(n),而遍历Object的时间复杂度是O(1)。
虽然对于10000次集合的for检索代价也就几十ms,可是如果是1000*1000次检索或更多,使用Object的优势一下就体现出来了。
对于集合的遍历效率(从高到低): var value = obj[key]; > for ( ; ; ) > for ( in ) 效率最差的就是for( in )了,如果集合过大,尽量不要使用for ( in )遍历。
Array【数组】和Object【对象】的特性比较的更多相关文章
- element vue Array数组和Map对象的添加与删除
使用场景: 一个后台系统中, 管理员要配置自定义字段后台要生成id和title,其他角色要使用自定义字段的表单, 添加数据, 但是每个要填写的对象的id 和title都是无法固定的,因此页面显示的ti ...
- JAVA将Object对象转byte数组
/** * 将Object对象转byte数组 * @param obj byte数组的object对象 * @return */ public static byte[] toByteArray(Ob ...
- JavaScript数组为什么是对象
有过PHP编程经验的程序员学习JavaScript的时候,会发现数组也是对象,这和PHP是不同的,在PHP中数组就是数组类型,并不是是对象.究竟为什么在JavaScript中数组会是对象呢? var ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组
php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组 (2012-09-10 19:58:49) 标签: 杂谈 分类: 网页基础知识 php如何遍历多 ...
- 如果一个Object对象可能是集合或者数组那么如何对其进行迭代
需求:一个方法传入的参数是Object类型(假设对象为“items”,使用Object类型也是为了使用多态而增加方法复用性),但已知这个Object对象可能是集合,包括Collection和Map,也 ...
- 如果一个Object对象可能是数组那么如何对其进行迭代
需求:一个方法传入的参数是Object类型(假设对象为“items”,使用Object类型也是为了使用多态而增加方法复用性),但已知这个Object对象可能是基本类型数组,也可能是对象数组,如何将这个 ...
- for 循环 和 Array 数组对象
博客地址:https://ainyi.com/12 for 循环 和 Array 数组对象方法 for for-in for-of forEach效率比较 - 四种循环,遍历长度为 1000000 的 ...
- javascript内置对象一: Array数组
在JavaScript中的任何事物,字符串,数组,函数等等都是对象. 理解:浏览器自己封装好的对象,可以直接使用. push /pʊʃ/ 增加 在末尾增加 unshif ...
- Java Script基础(八) Array数组对象
一.Array数组 JavaScript中的数组也是具有相同数据类型的一个或者多个值得集合.用法和Java中的数组类似. Array对象的常用属性和方法: 属性: length:获取数组的长度: 方法 ...
随机推荐
- 17、Semantic-UI之分页插件
在很多的前端开发框架中都会有提供分页插件,但是分页插件的使用如果手动编写还是比较复杂的.使用Semantic-UI中的分页插件更加简单方便.分页插件的使用必须要和后台结合. 示例:定义分页插件 & ...
- Vc6.0 编译发生致命链接错误 :不能打开exe的文件
错误: fatal error LNK1104: cannot open file "Debug/CeshiToolBar1.exe" 解决方法:打开任务管理器,找到对应的exe应 ...
- .net 线程基础 ThreadPool 线程池
1. ThreadPool 线程池异步: //public static bool QueueUserWorkItem(WaitCallback callBack); //public static ...
- /Date(1512551901709+0800)/转换
var convertDT=function(dt) { dt.replace(/Date\([\d+]+\)/, function (a) { eval('d = new ' + a) }); al ...
- (zxing.net)一维码Code 39的简介、实现与解码
一.简介 一维码Code 39:由于编制简单.能够对任意长度的数据进行编码.支持设备广泛等特性而被广泛采用. Code 39码特点: 能够对任意长度的数据进行编码,其局限在于印刷品的长度和条码阅读器的 ...
- django drf 初探serializer
1.定义Model对应的serializer from rest_framework import serializers class GoodsSerializer(serializers.Seri ...
- Microsoft Office Specialist (MOS) 认证考试详解---word 2010 部分
Microsoft Office Specialist ( MOS)认证考试详解 首先是 Microsoft Certification overview http://www.microsoft ...
- 《Beginning Java 7》 - 5 - Hash Codes 哈希码
哈希码和 equals() 都是用来比较的. 1. 哈希码的作用是用来提高比较的效率.因为当比较的对象比较复杂时,equals() 可能很耗时,但哈希码只需要比较一个 int .哈希码常用于集 (se ...
- 新公司,环境搭建,windows上的坑
1 在windows上安装nodejs环境,node -v 后可以看到版本号 2 在windows上安装nvm管理node的版本,可以对node版本自由切换,使用5.3.0版本的node 3 在win ...
- luogu4294 [WC2008]游览计划(状压DP/斯坦纳树)
link 题目大意:给定一个网格图,有些点是关键点,选择格点有代价,求把所有关键点联通的最小代价 斯坦纳树模板题 斯坦纳树问题:给定一个图结构,有一些点是关键点,求把这些关键点联通的最小代价e 斯坦纳 ...