您现在的位置是:首页 > Javascript
当前栏目
用js来实现那些数据结构11(字典)
2023-02-18 15:50:13 时间
我们这篇文章来说说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。
最后,由于本人水平有限,能力与大神仍相差甚远,若有错误或不明之处,还望大家不吝赐教指正。非常感谢!
相关文章
- js日志输出还是只会console.log么,那你就out了
- Jackson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo
- Jaskson精讲第6篇-自定义JsonSerialize与Deserialize实现数据类型转换
- @JsonCreator自定义反序列化函数-JSON框架Jackson精解第5篇
- Jackson精解第4篇-@JacksonInject与@JsonAlias注解
- 属性序列化自定义与字母表排序-JSON框架Jackson精解第3篇
- URL及日期等特殊数据格式处理-JSON框架Jackson精解第2篇
- JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法
- 通过java程序(JSch)运行远程linux主机上的shell脚本
- JS/TS项目里的Module都是什么?
- 为啥JS/TS里都会有"use strict"
- api接口返回动态的json格式?我太难了,尝试一下 linq to json
- 教你如何解决JS/TS里特定String进行拆分然后遍历各个元素
- 对 JsonConvert 的认识太肤浅了,终于还是遇到了问题
- knockoutjs如何动态加载外部的file作为component中的template数据源
- 掌握这20个JS技巧,做一个不加班的前端人
- 如何在TypeScript/JavaScript项目里引入MD5校验和
- Javascript之旅——终点站:困惑的settimeout
- Javascript之旅——第十一站:原型也不好理解?
- Javascript之旅——第十站:为什么都说闭包难理解呢?