字典是一种以键- 值对形式存储数据的数据结构,就像电话号码簿里的名字和电话号码一样。要找一个电话时,先找名字,名字找到了,紧挨着它的电话号码也就找到了。这里的键是指你用来查找的东西,值是查找得到的结果。
与Set类相似,ECMAScript 6同样包含了一个Map类的实现,即我们所说的字典。
字典和集合很相似,集合以[值,值]的形式存储元素,字典则是以[键,值]的形式来存储元素。字典也称作映射。
在字典中key是无序的、不能重复的,而Value可以重复。
字典类常见的操作:
- set(key,value):向字典中添加新元素。
- remove(key):通过使用键值来从字典中移除键值对应的数据值。
- has(key):如果某个键值存在于这个字典中,则返回true,反之则返回false。
- get(key):通过键值查找特定的数值并返回。
- clear():将这个字典中的所有元素全部删除。
- size():返回字典所包含元素的数量。与数组的length属性类似。
- keys():将字典所包含的所有键名以数组形式返回。
- values():将字典所包含的所有数值以数组形式返回。
封装字典(对象)
//封装字典类
function Dictionary(){
//字典属性
this.items = {}
//字典操作方法
//一.在字典中添加键值对
Dictionary.prototype.set = function(key, value){
this.items[key] = value
}
//二.判断字典中是否有某个key
Dictionary.prototype.has = function(key){
return this.items.hasOwnProperty(key)
}
//三.从字典中移除元素
Dictionary.prototype.remove = function(key){
//1.判断字典中是否有这个key
if(!this.has(key)) return false
//2.从字典中删除key
delete this.items[key]
return true
}
//四.根据key获取value
Dictionary.prototype.get = function(key){
return this.has(key) ? this.items[key] : undefined
}
//五.获取所有keys
Dictionary.prototype.keys = function(){
return Object.keys(this.items)
}
//六.size方法
Dictionary.prototype.keys = function(){
return this.keys().length
}
//七.clear方法
Dictionary.prototype.clear = function(){
this.items = {}
}
//七.values方法
// 我们不能仅仅使用for-in语句来遍历items对象的所有属性,
//还需要使用has方法(验证items对象是否包含某个属性)
//因为对象的原型也会包含对象的其他属性
//(JavaScript基本的Object类中的属性将会被继承,
//并存在于当前对象中,而对于这个数据结构来说,我们并不需要它们)。
Dictionary.prototype.values = function(){
var values = {};
for (var k in items) {
if (this.has(k)) {
values.push(items[k]);
}
}
return values;
}
}
封装字典(数组)
数组的字符串也可以作为key,之前都没注意,可见一切皆对象,数组也是对象。同时数组也继承了对象原型上的方法。
//封装字典类
function Dictionary(){
//字典属性
this.items = []
//字典操作方法
//一.在字典中添加键值对
Dictionary.prototype.set = function(key, value){
this.items[key] = value
}
//二.判断字典中是否有某个key
Dictionary.prototype.has = function(key){
return this.items.hasOwnProperty(key)
// 数组页有这个方法
}
//三.从字典中移除元素
Dictionary.prototype.remove = function(key){
//1.判断字典中是否有这个key
if(!this.has(key)) return false
//2.从字典中删除key
delete this.items[key]
return true
}
//四.根据key获取value
Dictionary.prototype.get = function(key){
return this.has(key) ? this.items[key] : undefined
}
//五.获取所有keys
Dictionary.prototype.keys = function(){
return Object.keys(this.items)
}
//六.size方法
Dictionary.prototype.keys = function(){
return this.items.length
}
//七.clear方法
Dictionary.prototype.clear = function(){
this.items = []
}
//七.values方法
// 我们不能仅仅使用for-in语句来遍历items对象的所有属性,
//还需要使用has方法(验证items对象是否包含某个属性)
//因为对象的原型也会包含对象的其他属性
//(JavaScript基本的Object类中的属性将会被继承,
//并存在于当前对象中,而对于这个数据结构来说,我们并不需要它们)。
Dictionary.prototype.values = function(){
var values = {};
for (var k in items) {
if (this.has(k)) {
values.push(items[k]);
}
}
return values;
}
}