js中Map之基本用法分开单独写方法,当做类库使用


Array.prototype.remove = function(s) {   
    for (var i = 0; i < this.length; i++) {   
        if (s == this[i])   
            this.splice(i, 1);   
    }   
}   
  
/**  
 * Simple Map  
 *   
 *   
 * var m = new Map();  
 * m.put('key','value');  
 * ...  
 * var s = "";  
 * m.each(function(key,value,index){  
 *      s += index+":"+ key+"="+value+"/n";  
 * });  
 * alert(s);  
 *   
 * @author dewitt  
 * @date 2008-05-24  
 */  
function Map() {   
    /** 存放键的数组(遍历用到) */  
    this.keys = new Array();   
    /** 存放数据 */  
    this.data = new Object();   
       
    /**  
     * 放入一个键值对  
     * @param {String} key  
     * @param {Object} value  
     */  
    this.put = function(key, value) {   
        if(this.data[key] == null){   
            this.keys.push(key);   
        }   
        this.data[key] = value;   
    };   
       
    /**  
     * 获取某键对应的值  
     * @param {String} key  
     * @return {Object} value  
     */  
    this.get = function(key) {   
        return this.data[key];   
    };   
       
    /**  
     * 删除一个键值对  
     * @param {String} key  
     */  
    this.remove = function(key) {   
        this.keys.remove(key);   
        this.data[key] = null;   
    };   
       
    /**  
     * 遍历Map,执行处理函数  
     *   
     * @param {Function} 回调函数 function(key,value,index){..}  
     */  
    this.each = function(fn){   
        if(typeof fn != 'function'){   
            return;   
        }   
        var len = this.keys.length;   
        for(var i=0;i<len;i++){   
            var k = this.keys[i];   
            fn(k,this.data[k],i);   
        }   
    };   
       
    /**  
     * 获取键值数组(类似Java的entrySet())  
     * @return 键值对象{key,value}的数组  
     */  
    this.entrys = function() {   
        var len = this.keys.length;   
        var entrys = new Array(len);   
        for (var i = 0; i < len; i++) {   
            entrys[i] = {   
                key : this.keys[i],   
                value : this.data[i]   
            };   
        }   
        return entrys;   
    };   
       
    /**  
     * 判断Map是否为空  
     */  
    this.isEmpty = function() {   
        return this.keys.length == 0;   
    };   
       
    /**  
     * 获取键值对数量  
     */  
    this.size = function(){   
        return this.keys.length;   
    };   
       
    /**  
     * 重写toString   
     */  
    this.toString = function(){   
        var s = "{";   
        for(var i=0;i<this.keys.length;i++,s+=','){   
            var k = this.keys[i];   
            s += k+"="+this.data[k];   
        }   
        s+="}";   
        return s;   
    };   
}   
  
  
function testMap(){   
    var m = new Map();   
    m.put('key1','Comtop');   
    m.put('key2','南方电网');   
    m.put('key3','景新花园');   
    alert("init:"+m);   
       
    m.put('key1','康拓普');   
    alert("set key1:"+m);   
       
    m.remove("key2");   
    alert("remove key2: "+m);   
       
    var s ="";   
    m.each(function(key,value,index){   
        s += index+":"+ key+"="+value+"/n";   
    });   
    alert(s);   
}  

JavaScript 的 `Map` 对象是一个集合数据结构,它存储键值对,并允许使用任何类型的键(例如字符串、数字甚至对象)。与数组相比,Map 的优势在于它的元素是以键值对的形式存储,查找效率更高。 ### Map 的创建 你可以通过以下几种方式创建一个新的 `Map` 实例: ```javascript // 方式一:使用构造函数直接创建 const map = new Map(); // 方式二:使用字面量语法初始化 Map const map = new Map([ ['key1', 'value1'], ['key2', 'value2'] ]); // 或者用 Object.fromEntries() 将对象转换为 Map const obj = { key1: 'value1', key2: 'value2' }; const mapFromObj = new Map(Object.entries(obj)); ``` ### Map 的常用方法 #### 添加键值对 (`set`) 向 `Map` 添加新项或覆盖已有键的值。 ```javascript map.set('newKey', 'newValue'); ``` #### 获取值 (`get`) 通过键获取对应的值。 ```javascript const value = map.get('newKey'); ``` #### 删除项 (`delete`) 移除指定键及其关联的值。 ```javascript map.delete('newKey'); ``` #### 清空所有内容 (`clear`) 删除所有的键值对。 ```javascript map.clear(); ``` #### 遍历 (`entries`, `keys`, `values`) 遍历 `Map` 内的所有键值对、键或值。 ```javascript for (const [key, value] of map.entries()) { console.log(`${key}: ${value}`); } for (const key of map.keys()) { console.log(key); } for (const value of map.values()) { console.log(value); } ``` #### 检查是否存在某个键 (`has`) 检查 Map 是否包含指定的键。 ```javascript if (map.has('newKey')) { console.log("Key exists."); } ``` #### 查找键的位置 (`ofKeyIndex`) 找到给定键的第一个位置(如果存在),并返回索引。对于不存在的键返回 `-1`。 ```javascript let index = map.indexOf('keyName'); ``` ### 示例 假设我们有一个学生成绩表: ```javascript const grades = new Map(); grades.set('Alice', { math: 85, science: 90 }); grades.set('Bob', { math: 70, science: 75 }); grades.forEach((scores, name) => { console.log(`${name} 的数学成绩: ${scores.math}, 科学成绩: ${scores.science}`); }); ``` ### 相关问题: 1. **如何迭代 Map 并处理每个键值对?** 2. **解释 `Map.of` 和 `Map.entries()` 的区别?** 3. **当需要同时维护键和值的顺序时,Map 应该如何使用?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值