用ES5模拟实现ES6中的Map类

ECMAScript6原生实现了Map类,即我们所说的字典,字典和集合很像,不过集合是以值值得形式存储元素,字典则是以键值的形式存储元素。字典也叫映射。

 1. 创建一个字典

function Map() {
    var items = {};
}

与Set类一样,我们用Object的实例而不是数组存储元素,我们实现以下方法:

1.set(key,value):向字典中添加新元素。

2.remove(key):使用键名从字典中移除相应的元素。

3.has(key):如果某个键值存在于字典中,返回true,否则返回false。

4.get(key):通过键名找到指定的值并返回。

5.clear():清空字典。

6.size():返回字典中元素个数。

7.values():将字典所有值以数组形式返回。

8.getItems():返回items变量,代表字典本身。

 

1.1 has和set方法
this.has = function(key){
        return key in items;
    },

this.set = function(key,value){
        items[key] = value;
    }

has方法判断某个键值是否在字典中,set方法为字典添加新元素或更新已有元素。

1.2 remove方法
this.remove = function(key){
        if (this.has(key)) {
            delete items[key];
            return true;
        }
        return false;
    }
1.3 get和values方法
this.get = function(key){
        return this.has(key)?items[key]:undefined;
    },

this.values = function(){
        var values = [];
        for(var k in items){
            if (this.hasOwnProperty(k)) {
                values.push(items[k]);
            }
        }
        return values;
    }

要注意的是,for...in会遍历出对象原型上的属性,所以要this.hasOwnProperty()方法选出对象自身的属性。

1.4 clear,size和getItems方法
this.clear = function(){
        items = {};
    },

this.size = function(){
        return Object.Keys(items).length;
    },

this.getItems = function(){
        return items;
    }

 以下为完整的Map类代码实现:

function Map() {
    var items = {};
    this.has = function(key){
        return key in items;
    },
    this.set = function(key,value){
        items[key] = value;
    },
    this.remove = function(key){
        if (this.has(key)) {
            delete items[key];
            return true;
        }
        return false;
    },
    this.get = function(key){
        return this.has(key)?items[key]:undefined;
    },
    this.values = function(){
        var values = [];
        for(var k in items){
            if (this.hasOwnProperty(k)) {
                values.push(items[k]);
            }
        }
        return values;
    },
    this.clear = function(){
        items = {};
    },
    this.size = function(){
        return Object.Keys(items).length;
    },
    this.getItems = function(){
        return items;
    }
}

 

转载于:https://www.cnblogs.com/Cathamerst/p/7222878.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值