js中的Map使用

js里面没有map,用object[key]=value,自己写map方法。

 

// js中没有map,写一个,提供了remove、put、get、clean、each、entrys、isEmty、toString、size方法。并给了使用例子。使用时,放置项目js文件中即可。
function Map() {
    /*
    * 找到元素位置,删除元素
    * */
    Array.prototype.remove = function(val) {
        var index = this.indexOf(val);
        if (index > -1) {
            this.splice(index, 1);
        }
    };
    /*  indexOf()    方法可返回某个指定的字符串值在字符串中首次出现的位置。

        stringObject.indexOf(searchvalue,fromindex)
        searchvalue     必需。规定需检索的字符串值。
        fromindex     可选的整数参数。规定在字符串中开始检索的位置。
                     它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。
    */

    /*  splice使用   返回被删除/改变的原数组

        arrayObject.splice(index,howmany,item1,.....,itemX)
        index        必需。   整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
        howmany        必需。   要删除的项目数量。如果设置为 0,则不会删除项目。
        item1, ..., itemX    可选。向数组添加的新项目。
    */

    /** 存放键的数组(遍历用到) */
    this.keys = new Array();
    /** 存放数据 */
    this.data = new Object();
    /**
     * 使用data[k] = v,存储数据。
     */
    this.put = function(k, v) {
        if(this.data[k] == null){
            this.keys.push(k);
        }
        this.data[k] = v;
    };

    /**
     * 通过k获取v
     */
    this.get = function(k) {
        return this.data[k];
    };

    /**
     * 通过key删除键值
     */
    this.remove = function(k) {
        this.keys.remove(k);
        this.data[k] = null;
    };

    /**
     * 遍历Map,执行处理函数
     * @param {Function} 回调函数 function(k,v,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[len-1-i];
            fn(k,this.data[k],i);
        }
    };

    /**
     * 获取键值对数组
     */
    this.entrys = function() {
        var len = this.keys.length;
        var entrys = new Array(len);
        for (var i = 0; i < len; i++) {
            entrys[i] = {
                k : this.keys[i],
                v : this.data[this.keys[i]]
            };
        }
        return entrys;
    };

    /**
     * isEmpty
     */
    this.isEmpty = function() {
        return this.keys.length == 0;
    };

    /**
     * size
     */
    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]+'"';
        }
        if(s.length>1){
            //去掉多添加的一个逗号
            s = s.substring(0,s.length-1);
        }
        s+="}";
        return s;
    };

    /**
     * clean
     */
    this.clean = function(){
        this.keys = new Array();
        this.data = new Object();
    }
}

var  m = new Map();
m.put(1,3);
m.put(2,4);
m.each(function(k,v,index){
    console.log("i"+index);
    console.log("k"+k);
    console.log("v"+v);
});
console.log(m.entrys());

 

posted @ 2019-06-18 14:51  乐畏  阅读(1382)  评论(0编辑  收藏  举报