7JavaScript数据结构与算法--字典

版权声明:本文为作者的原创文章,未经允许不得转载。 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('---------------');

打印:

猜你喜欢

转载自blog.csdn.net/lin5165352/article/details/81546324
今日推荐