# 字典

数组-集合-字典是几乎编程语言都会默认提供的数据类型

在JavaScript中默认提供了数组,ES6中增加了集合和字典

# 字典的特点:

  • 字典的主要特点是一一对应的关系
  • 比如保存一个人的信息,在合适的情况下取出这些信息
  • 使数组的方式:[18, '小鱼', 1.8] 可以通过下标获取值
  • 使用字典的方式: { 'age': 18, 'name': '小鱼', 'height': 1.8 } 可以通过key获取value
  • 另外字典中的key是不可以重复的。而value可以重复,并且字典中的key是无序的

# 字典和映射的关系:

有些编程语言中称这种映射关系为字典,因为他确实和生活中的字典比较相似(比如Swift中的Dictionary, Python中的 dict)

有些编程语言中成这种映射关系为 Map ,注意Map在这里不是地图的意思,而是翻译成映射(比如Java中就有HashMap & TreeMap)

# 字典和数组:

字典和数组对比的话,字典可以非常方便的通过key来搜索对应的value,key可以包含特殊含义,也更容易被人们记住

# 字典和对象:

很多编程语言(比如Java)中对字典和对象区分比较明显,对象通常是一种在编译期就确定下来的结构,不可以动态的添加或者删除属性,而字典通常会使用类似于哈希表的数据结构去实现一种可以动态的添加数据的结构

但是在JavaScript中,似乎对象本身就是一种字典,所有在早期的JavaScript中,没有字典这种数据类型,因为你完全可以使用对象去代替。

# 字典常见的操作

  • set(key,value) 向字典中添加新元素
  • remove(key) 通过使用键值来从字典中移除键值对应的数据值
  • has(key) 如果某个键值存在于这个字典中,则返回 true,反之则返回 false
  • get(key) 通过键值查找特定的数值并返回
  • clear() 将这个字典中的所有元素全部删除
  • size() 返回字典所包含元素的数量。与数组的 length 属性类似
  • keys() 将字典所包含的所有键名以数组形式返回
  • values() 将字典所包含的所有数值以数组形式返回

class Map {
	constructor() {
		this.items = {}
	}
	// 1.set 方法
	set (key, value) {
		this.items[key] = value
	}
	// 2.remove 方法
	remove(key) {
		// 如果集合不存在该 key,返回 false
		if (!this.has(key)) {
			return false
		}
		delete this.items[key]
		return true
	}
	// 3.has 方法
	has (key) {
		return this.items.hasOwnProperty(key)
	}
	// 4.get 方法
	get (key) {
		return this.has(key) ? this.items[key] : undefined
	}
	// 5.clear 方法
	clear() {
		this.items = {}
	}
	// 6.size 方法
	size() {
		return this.keys().length
	}
	// 7.keys 方法
	keys() {
		return Object.keys(this.items)
	}
	// 8.values 方法
	values() {
		return Object.values(this.items)
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43