用js来实现那些数据结构11(字典)

我们这篇文章来说说Map这种数据结构如何用js来实现,其实它和集合(Set)极为类似,只不过Map是【键,值】的形式存储元素,通过键来查询值,Map用于保存具有映射关系的数据,Map里保存着两组数据:

大家好,又见面了,我是你们的朋友全栈君。

  我们这篇文章来说说Map这种数据结构如何用js来实现,其实它和集合(Set)极为类似,只不过Map是【键,值】的形式存储元素,通过键来查询值,Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以是任何引用类型的数据,但key不能重复,而集合以【值,值】的形式存储元素。字典也可以叫做映射。在ES6中同样新增了Map这种数据结构。我们今天要实现的Map跟前面所实现的Set是十分相似的。只不过在对应的映射关系时会有些修改。

  那么这篇文章我们快速的完成Map类的相关代码:

  

function Map () {
    var items = {};

    this.has = function (key) {
        return key in items;
    }

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

    this.delete = 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.has(k)) {
                values.push(items[k])
            }
        }
        return values;
    }

    this.keys = function () {
        return Object.keys(items);
    }

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

    this.clear = function() {
        items = {};
    }

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

var map = new Map();

map.set("zak","fat");
map.set("lily","thin");
map.set("david","big");
map.set("jams","small");

console.log(map.has("jams"));//true
console.log(map.has("zaking"));//false

console.log(map.size());//4
console.log(map.keys());//["zak", "lily", "david", "jams"]
console.log(map.values());//["fat", "thin", "big", "small"]
console.log(map.get("zak"));//fat

map.delete("zak");
console.log(map.has("zak"));//false
console.log(map.getItems());//{lily: "thin", david: "big", jams: "small"}

  这样我们就实现了自己的Map类。

  ES6中的Map类,小伙伴们也可以用上面的测试方式来测试ES6原生Map,跟ES6原生的Set堪比兄弟结构。所以这里也不再多说。大家最好自己去敲一遍代码。相信小伙伴们一起学到这里的话,肯定对数据结构不在陌生。其实数据结构的面纱并不神秘。

  这一篇代码着实不多,但是对下面要讲的散列表(hashMap)又十分必要。所以就单独拆出来了一章。独立的简单说明了一番。

  除了后面要讲的散列表外,还剩下两个数据结构要讲讲,那就是树和图, 其中还会加入一些相关算法的介绍和说明。

  然后,hashMap个人觉得十分重要,是一种存储元素及快速查找元素十分便捷一种数据结构。这里不多说。下一篇会详细的讲解hashMap。

 

  最后,由于本人水平有限,能力与大神仍相差甚远,若有错误或不明之处,还望大家不吝赐教指正。非常感谢!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124422.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • chmod 755 究竟是什么鬼?

    chmod 755 究竟是什么鬼?有个校招的同事问我:(1)使用ls–l查看文件,前面显示的-rwxrwxr-x是什么意思?(2)chmod755xxx.sh又是什么意思?1分钟简单说下,这两个…

    2022年7月16日
    21
  • Redis雪崩_redis落地方式

    Redis雪崩_redis落地方式同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,怎么重启用户都会把你打挂,等你能重启的时候,用户早就睡觉去了,并且对产品失去了信心,什么垃圾产品。设置两个缓存,原始缓存和备用缓存,原始缓存失效时,访问备用缓存,备用缓存失效时间设置长点。设置缓存过期时间时加上一个随机值,避免缓存在同一时间过期。雪崩概念在某一个时间段,缓存集中过期失效。…

    2025年11月18日
    2
  • 「万云科普」如何向非极客解释非对称加密[通俗易懂]

    「万云科普」如何向非极客解释非对称加密[通俗易懂]from:https://mp.weixin.qq.com/s/E-i4a5sEKWRRq3f0zzXekQ解释的通俗易懂,mark一下。非对称加密其实并不如它听起来的那么复杂,我们只需要换个方式解释它,就能让不是极客的你也秒懂。为什么我想用一种通俗易懂的方式来解释深奥的非对称加密?是因为我正在研究一种会大量使用加密的产品,我自己最近不止一次向朋友解释非对称加密,而令我惊讶的是,网上所搜索到的任…

    2022年6月2日
    24
  • react知识总结_六年级教学工作总结个人

    react知识总结_六年级教学工作总结个人React个人入门总结《六》

    2022年4月21日
    81
  • python快速排序法实现

    python快速排序法实现基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3

    2025年6月18日
    4
  • js 填充数组长度

    js 填充数组长度js 填充的方法有以下三种 constarray newArray 100 fill Array from newArray 100 keys letarr Array from length 100 v k gt k 如果下面有这么一个场景 你在接口中获取了一个数组对象 如下 id 1 id 2 id 3 id 4 你需要把这个数组变成一个以 100 位的数组对象 我们可以用循坏的方式往数组中 p

    2025年9月25日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号