JavaScript集合类:Array、Map、Set
来源:互联网 发布:电脑离线电子地图软件 编辑:程序博客网 时间:2024/05/27 01:03
在JavaScript中不像java有那么多的数据结构。在实际工作中,使用对象还是数组需要仔细考虑下。例如:如果实现 Map的功能,既可以使用关联数组,也可以使用对象,那么区别是什么呢?
需要注意的是,在JavaScript中,所有变量实际上都是某种类型的对象。记住这点,就不难理解一个数组其实就是一个Array() 类型的对象,那么就可以给它添加各种属性。而所谓的关联数组,其实就是给该数组对象增加了很多属性,这在访问时就可以看出区别。
一、基本概念
- 对象:对象的每个值都是对象的一个属性。创建对象可以用var obj = {}:
var person = {age:18,name:"John"};var person2 = Object()person2.age = 19person2.name = "Tim"
- Array():传统数组(下标访问);关联数组(其实是数组对象的属性).
var persons = Array(4) //创建只有四个元素的数组
var names1 = ['a','b','c']//
var persons2 = Array()
persons2["age"] = 18
persons2["name"] = "John"
既然对象就可以实现Map的功能,为啥要有map? 注意:JavaScript的对象的键必须是字符串。 - Map:是一组键值对的结构,具有极快的查找速度。通过传入数组的数组来建立。通过调用 .set(key,value) 来添加新的元素。
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);m.get('Michael'); // 95m.set('Adam', 67); // 添加新的key-value
- Set:Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set:
var s1 = new Set(); // 空Setvar s2 = new Set([1, 2, 3]); // 含1, 2, 3
重复元素在Set中自动被过滤,add(key) 方法可以添加元素到Set中。
二、iterable类型遍历集合:Array、Map和Set都属于iterable类型
- 具有iterable类型的集合可以通过新的for … of 循环来遍历。
var a = ['A', 'B', 'C'];var s = new Set(['A', 'B', 'C']);var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);for (var x of a) { // 遍历Array alert(x);}for (var x of s) { // 遍历Set alert(x);}for (var x of m) { // 遍历Map alert(x[0] + '=' + x[1]);}
- for … of循环和for … in循环有何区别?前者只取集合本身元素,而不是属性,后者当我们给数组人为天添加属性后,就会方位所有的key,原数组则返回数组下标。
var a = ['A', 'B', 'C'];a.name = 'Hello';for (var x in a) { alert(x); // '0', '1', '2', 'name'}/* for ... in循环将把name包括在内,但Array的length属性却不包括在内。for ... of循环则完全修复了这些问题,它只循环集合本身的元素:*/ var a = ['A', 'B', 'C'];a.name = 'Hello';for (var x of a) { alert(x); // 'A', 'B', 'C'}
- 直接使用iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。
以Array为例:
var a = ['A', 'B', 'C'];a.forEach(function (element, index, array) { // element: 指向当前元素的值 // index: 指向当前索引 // array: 指向Array对象本身 alert(element);});// 注意,forEach()方法是ES5.1标准引入的,你需要测试浏览器是否支持。Set与Array类似,但Set没有索引,因此回调函数的前两个参数都是元素本身:var s = new Set(['A', 'B', 'C']);s.forEach(function (element, sameElement, set) { alert(element);});// Map的回调函数参数依次为value、key和map本身:var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);m.forEach(function (value, key, map) { alert(value);});
那么对于之前提到的 for… in 出现的返回key 的问题用 for … of 或者 forEach 回调都可以解决。
var a = ['A', 'B', 'C'];a.name = 'Hello';for (var x of a) { alert(x); // 'A', 'B', 'C'}a.forEach(function(v,i){ alert(v); // 'A', 'B', 'C' 与 for ... of 功效相同})
部分内容截取自如下网址,对作者表示感谢.JavaScrip教程
0 0
- JavaScript集合类:Array、Map、Set
- 12 映射-- 集合类的映射(Set,List,Map,Array)
- hibernate 集合(set, list, array,bag, map)
- js遍历集合(Array,Map,Set)
- 集合映射 map list array set
- 集合类 List/Set/Map
- NHibernate集合映射中的set, list, map, bag, array
- Hibernate常见集合映射(Set,List Array,Map,Bag)
- NHibernate集合映射中的set, list, map, bag, array
- 集合映射(set, list, array,bag, map)详解
- hibernate 映射集合(Set,List Array,Map,Bag)
- Hibernate的集合映射(Set、List、Array、Map、Bag)
- Hibernate的集合映射(Set、List、Array、Map、Bag)
- Hibernate常见的集合映射 Set,List,Array,Map,Bag
- Hibernate的集合映射(Set、List、Array、Map、Bag)
- 【Hibernate】Hibernate的集合映射(Set、List、Array、Map、Bag)
- Java之数组array和集合list、set、map
- Java集合工具Map、List、Set、Array使用小结
- python学习-模块学习
- 包裹侠-快递单号查询App
- gcc使用
- AJAX跨域请求
- 技术人员如何创业《四》- 打造超强执行力团队(转载)
- JavaScript集合类:Array、Map、Set
- leetcode 69 - Sqrt(x)
- height vs line-height
- ListView学习(三)
- CentOS一键安装LNMP
- [node]jQuery requires a window with a document
- 几种简单的数据结构的C++实现,树,图,链表,环形队列,栈等---栈篇
- 4553: [Tjoi2016&Heoi2016]序列
- 画图理解软件工程-进行详细的需求分析(二)