版权声明:本文为作者的原创文章,未经允许不得转载。 https://blog.csdn.net/lin5165352/article/details/81546324
字典顾名思义就是字典的意思,也称作映射,它包含键和值,[键,值]。
字典中的元素是不重复的。
JavaScript实现字典,包含一下方法。
- has(key):检查字典中是否包含某值,返回 true 和 false。
- set(key,value):向字典中添加新元素。也可以覆盖旧的元素。
- delete(key):删除某个值以及其键名。
- get(key):通过键名key获取其对于的值value。
- clera():清除整个字典。
- size():返回字典的长度。
- keys():返回字典所有的键名。
- values():返回所有的数值
ES5代码:
function Dictionary() {
let items = {};
this.has = function (key) {
return key in items;
};
this.set = function (key, value) {
items[key] = value;
};
this.delete = function (key) {
if(items.has(key)){
delete items[key];
return true;
}
return false;
};
this.get = function (key) {
return this.has(key) ? items[key] : undefined;
};
this.values = function () {
let values = [];
for(let k in items){
if(this.has(k)){
values.push(items[k]);
}
}
return values;
};
this.clear = function () {
items = {};
};
this.size = function () {
let count = 0;
for(let k in items){
if(items.hasOwnProperty(k)){
++count;
}
}
return count;
};
this.key = function () {
return Object.keys(items);
};
this.getItems = function () {
return items;
}
}
let dic = new Dictionary();
dic.set('name1','张一');
dic.set('name2','张二');
dic.set('name3','张三');
dic.set('age','19');
console.log(dic.values());
console.log(dic.size());
console.log(dic.key());
console.log(dic);
console.log(dic.getItems());
console.log(dic.get('name1'));
打印值:
ES6 中的 Map类
es6中增加了Map类。有以下方法和属性:
- clear():
- delete(key):
- get(key):
- has(key):
- set(key,value):添加键值对
- forEach():回调函数,可以打印键值名和值。
- values():返回迭代器Iterator,需要通过next才能逐个打印出值。
- keys():返回迭代器Iterator,需要通过next才能逐个打印出值。
- size属性:返回长度。
Map类的源码:
interface Map<K, V> { clear(): void; delete(key: K): boolean; forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void; get(key: K): V | undefined; has(key: K): boolean; set(key: K, value: V): this; readonly size: number; }
测试代码:
let map = new Map();
map.set('a','北京');
map.set('b','天津');
map.set('C','江西');
console.log(map);
console.log(map.values());
/*let values = map.values();
let keys = map.keys();
for( let i = 0;i<map.size;i++){
//不能循环中用map.values(),会每次重新执行得到的都是第一个值
console.log(keys.next().value);
console.log(values.next().value);
}*/
console.log('---------------');
//这种方式也可以
for(let v of map.values()) console.log(v);
for(let k of map.keys()) console.log(k);
console.log('---------------');
map.forEach(function (v,k) {
console.log(k+'--'+v);
});
console.log('---------------');
map.delete('a');
console.log(map);
console.log('---------------');
map.clear();
console.log(map);
console.log('---------------');
打印: