zoukankan      html  css  js  c++  java
  • JavaScript实现字典类

    字典也称为映射符号表关联数组,在计算机科学中经常用来保存对象的引用地址。

    集合以【值,值】的形式存放元素,字典是以【键,值】的形式存放元素。

    class ValuePair {                             //存放一对键值的对象
        constructor(key, value) {
            this.key = key;
            this.value = value;
        }
        toString() {
            return `[#${this.key}:${this.value}]`;
        }
    }
    
    
    class Dictionary {
        constructor() {
            this.table = {};
        }
        toStrFn(str) {
            if (str == null) {
                return 'null';
            } else if (str === undefined) {
                return "undefined";
            } else {
                return str.toString();
            }
        }
        remove(key) {
            if (!this.hasKey(key)) {
                return false;
            }
            delete this.table[this.toStrFn(key)];
            return true;
        }
        hasKey(key) {
            return this.table[this.toStrFn(key)] != null;
        }
        set(key, value) {
            if (key == null || value == null) {
                return false;
            }
            const tableKey = this.toStrFn(key);
            this.table[tableKey] = new ValuePair(key, value);
            return true;
        }
        get(key) {
            if (!this.hasKey(key)) {
                return undefined;
            }
            return this.table[this.toStrFn(key)];  //返回值是键值对
        }
        clear() {
            this.table = {};
        }
        size() {
            return Object.keys(this.table).length;
        }
        isEmpty() {
            return this.size() === 0;
        }
        keys() {
            return this.keyValues().map(valuePair => valuePair.key);
        }
        values() {
            return this.keyValues().map(valuePair => valuePair.value);
        }
        keyValues() {
            return Object.values(this.table);
        }
        forEach(callBackFn) {
            const valuePair = this.keyValues();
            for (let i = 0; i < valuePair.length; i++) {
                callBackFn(valuePair[i].key, valuePair[i].value);
            }
        }
        toString() {
            if (this.isEmpty()) {
                return "";
            }
            const valuePair = this.keyValues();
            let objString = valuePair[0].toString();
            for (let i = 1; i < valuePair.length; i++) {
                objString = `${objString},${valuePair[i].toString()}`;
            }
            return objString;
        }
    }
    
    const dictionary = new Dictionary();
    
    dictionary.set('Gandalf', 'gandalf@email.com');
    dictionary.set('John', 'johnsnow@email.com');
    dictionary.set('Tyrion', 'tyrion@email.com');
    
    console.log(dictionary.hasKey('Gandalf')); // true
    console.log(dictionary.size()); // 3
    
    console.log(dictionary.keys()); // ["Gandalf", "John", "Tyrion"]
    console.log(dictionary.values()); // ["gandalf@email.com", "johnsnow@email.com", "tyrion@email.com"]
    console.log(dictionary.get('Tyrion')); // tyrion@email.com
    
    dictionary.remove('John');
    
    console.log(dictionary.keys()); // ["Gandalf", "Tyrion"]
    console.log(dictionary.values()); // ["gandalf@email.com", "tyrion@email.com"]
    
    console.log(dictionary.keyValues()); // [{key: "Gandalf", value: "gandalf@email.com"}, {key: "Tyrion", value: "tyrion@email.com"}]
    console.log(dictionary.toString()); // [#Gandalf: gandalf@email.com],[#Tyrion: tyrion@email.com]
    
    dictionary.forEach((k, v) => {
        console.log('forEach: ', `key: ${k}, value: ${v}`);
    });
    // forEach:  key: Gandalf, value: gandalf@email.com
    // forEach:  key: Tyrion, value: tyrion@email.com
  • 相关阅读:
    tornado简单的验证码
    python分页和session和计算时间差
    初始tornado框架
    Jquery小实例
    DOM+Javascript一些实例
    Javascript
    CSS拾遗+技巧集合
    css样式基础
    KVM NAT网络模式配置
    Ultimate guide to learning AngularJS in one day
  • 原文地址:https://www.cnblogs.com/WP-WangPin/p/13938318.html
Copyright © 2011-2022 走看看