用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。

 

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java删除文件和文件夹[通俗易懂]

    java删除文件和文件夹[通俗易懂]packagetest816;importjava.io.File;/*****删除文件或目录**@authorkempE-mail:572068511@qq.com*@version2018-8-16*@seejava.lang.Class*@sinceJDK1.8*/publicclassDeleteFile…

  • gridview布局_GridView

    gridview布局_GridView 不好意思..借用借用,拿出来晒下linkhref=”StyleSheet.css”rel=”stylesheet”type=”text/css”/>linkhref=”GamerGridView.css”rel=”stylesheet”type=”text/css”/> StandardGridViewdeclaration:/par??/c

  • 时序数据库应用_tsdb时序数据库

    时序数据库应用_tsdb时序数据库前言mysql可能大家都用的比较多且普遍,最近1年在使用PostgreSql,其大体DML语句与mysql类似,只是部分DDL语句有些区别,写一篇文章给正在应用该数据库或者准备选型该数据库的朋友,分享下使用方式与心得PostgreSqlPostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才…

  • 数据挖掘应用实例(db2聚合函数)

    http://blog.csdn.net/pipisorry/article/details/48894977海量数据挖掘MiningMassiveDatasets(MMDs)-JureLeskovec courses学习笔记之associationrules关联规则与频繁项集挖掘{FrequentItemsets:Oftencalled”association

  • [6] 算法路 – 双向冒泡排序的Shaker

    [6] 算法路 – 双向冒泡排序的Shaker

  • c语言cstdio什么意思,<iostream>与<cstdio>有什么区别?

    c语言cstdio什么意思,<iostream>与<cstdio>有什么区别?该楼层疑似违规已被系统折叠隐藏此楼查看此楼列个提纲:1.cstdio是面向“文件”的,或者不强调文件和非文件流的区别,默认流就是可以关联外部文件,至于文件的外延是啥就不管,扔给宿主环境了。从std::FILE这个名字以及printf/scanf接口描述基于fprintf/fscanf上就可以看出来。iostream头只是包含了一坨东西,封装标准输入输出流,和文件流(在)不通用。2.cstdio不…

发表回复

您的电子邮箱地址不会被公开。

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