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

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

Array:

  • 新建:var ary = <nobr><a class="iAs" οncοntextmenu="return false;" οnmοusemοve="kwM(-1);" οnmοuseοver="kwE(event,-1);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: none" οnclick="return kwC();" οnmοuseοut="kwL(event);" target="_blank">new</a></nobr> 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中检索出一个指定的值,我们需要遍历整个数组:

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

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

  varkey=''; 
  varvalue=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中的数组、集合及效率相关推荐

  1. 遍历JavaScript中的数组

    在Java中,可以使用for循环遍历数组中的对象,如下所示: String[] myStringArray = {"Hello", "World"}; for ...

  2. JavaScript中的数组和字符串

    知识内容: 1.JavaScript中的数组 2.JavaScript中的字符串 一.JavaScript中的数组 1.JavaScript中的数组是什么 数组指的是数据的有序列表,每种语言基本上都有 ...

  3. JavaScript中的数组创建

    JavaScript中的数组创建 本文转载自:众成翻译 译者:loveky 链接:http://www.zcfy.cc/article/713 原文:http://rainsoft.io/power- ...

  4. 也谈谈Javascript中的几个怪异特性(上)

    2019独角兽企业重金招聘Python工程师标准>>> Andy Croxall在Ten Oddities And Secrets About JavaScript罗列了他认为的10 ...

  5. 如何从JavaScript中的数组中删除虚假值

    There are a lot of ways to remove elements from an array in JavaScript, but what's the easiest way t ...

  6. 在 JavaScript 中清空数组

    该数组是存储在一个方便的索引集中的项目集合.如果我们想清空一个包含多个项目的数组怎么办? 本教程介绍了如何在 JavaScript 中清空数组的不同方法 1.将数组设置为大小为零的新数组 这是最快的方 ...

  7. 如何在JavaScript中比较数组?

    本文翻译自:How to compare arrays in JavaScript? I'd like to compare two arrays... ideally, efficiently. 我 ...

  8. 如何检查变量是否是JavaScript中的数组? [重复]

    本文翻译自:How do you check if a variable is an array in JavaScript? [duplicate] This question already ha ...

  9. javascript字典中添加数组_如何在JavaScript中使用数组方法:Mutator方法

    JavaScript中的数组由元素列表组成.JavaScript有许多有用的内置方法来处理数组.修改原始数组的方法称为mutator方法,返回新值或表示的方法称为accessor方法.在本教程中,我们 ...

最新文章

  1. VSS2005下载地址
  2. fastjson将json字符串转为Map对象,拿走不谢
  3. Spring4 MVC json问题(406 Not Acceptable)
  4. Kconfig文件结构(图文)简介
  5. 集合的定义与并查操作(C语言)
  6. linux内核测试,Linux内核测试的生命周期
  7. java调用ole ie_SWT中通过Automatioin的方式访问IE(升级版)
  8. 苹果又出新专利?全包围屏幕iPhone
  9. pytorch torch.eye
  10. 【Hadoop】Hadoop1.X版本与Hadoop2.X的区别
  11. 学习笔记:pscc2020基础
  12. 如何实现一套鼠标键盘控制二台主机
  13. 卫星导航术语 -- 词汇与概念解释(200条)(转自今日北斗)
  14. WebSocket+Tomcat实现网页简易聊天室
  15. http请求中文字符加解密
  16. table中 点击某一行变色
  17. 300000000元!短融网获C轮融资,CEO王坤透露了几点信息
  18. css加号图标_一步步打造自己的纯CSS单标签图标库
  19. Android控件外边框自定义
  20. 微信当面付款(二维码)

热门文章

  1. 云服务器 ECS 搭建WordPress网站:购买 Linux 实例
  2. PHP环境 PDOException PDOException: could not find driver
  3. 度量网络延迟和吞吐量
  4. Kent Beck 的《测试驱动开发》(TDD) Money示例Ruby版
  5. n 个骰子点数和及各自出现的概率
  6. offload error: cannot find offload entry解决办法
  7. 原 oracle执行update一直处于执行中,跟卡住一样
  8. MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 区别与使用场合
  9. 数据结构 平衡二叉树avl c++
  10. 20162309《程序设计与数据结构》第二学期课程总结