ES6 Map原理是什么
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍"ES6 Map原理是什么",在日常操作中,相信很多人在ES6 Map原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ES6 Map原理是什么"
千家信息网最后更新 2025年11月07日ES6 Map原理是什么
这篇文章主要介绍"ES6 Map原理是什么",在日常操作中,相信很多人在ES6 Map原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ES6 Map原理是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
Map利用链表,hash的思想来实现。
首先,Map可以实现删除,而且删除的数据可以是中间的值。而链表的优势就是在中间的任意位置添加,删除元素都非常快,不需要移动其他元素,直接改变指针的指向就可以。
而在存储数据很多的情况下,会导致链条过长,导致查找效率慢,所以我们可以创建一个桶(存储对象的容器),根据hash(把散列的值通过算法变成固定的某值)来平局分配数据,防止链条过长。
如下图:桶里面有3个位置,每一个位置都是一个对象,通过next属性指向下一个对象来把没有关联的对象联到一起。
把Map属性值和属性名都存到对象的值里。
简单模拟Map,代码如下:
function Mymap() { //构造函数 this.init();}//初始化函数,创建桶(数组),每个位置都是一个对象,每个对象的属性上设置next属性,并且初始化为null。Mymap.prototype.init = function () { this.tong = new Array(8); for (var i = 0; i < 8; i++) { this.tong[i] = new Object(); this.tong[i].next = null; }};//添加数据。Mymap.prototype.set = function (key, value) { var index = this.hash(key); //获取到当前设置的key设置到那个位置上 var TempBucket = this.tong[index]; //获取当前位置的对象 while (TempBucket.next) { //遍历如果当前对象链接的下一个不为空 if (TempBucket.next.key == key) { //如果要设置的属性已经存在,覆盖其值。 TempBucket.next.value = value; return; //return ,不在继续遍历 } else { TempBucket = TempBucket.next; //把指针指向下一个对象。 } } TempBucket.next = { //对象的next是null ,添加对象。 key: key, value: value, next: null }};//查询数据Mymap.prototype.get = function (key) { var index = this.hash(key); var TempBucket = this.tong[index]; while(TempBucket){ if(TempBucket.key == key){ return TempBucket.value; }else{ TempBucket = TempBucket.next; } } return undefined;}//删除数据Mymap.prototype.delete = function(key){ var index = this.hash(key); var TempBucket = this.tong[index]; while(TempBucket){ if(TempBucket.next.key == key){ TempBucket.next = TempBucket.next.next; return true; }else{ TempBucket = TempBucket.next; } }}//看当前属性是否存在Mymap.prototype.has = function(key){ var index = this.hash(key); var TempBucket = this.tong[index]; while(TempBucket){ if(TempBucket.key == key){ return true; }else{ TempBucket = TempBucket.next; } } return false;}//清空这个mapMymap.prototype.clear = function(){ this.init();}//使设置的属性平均分配到每个位置上,使得不会某个链条过长。Mymap.prototype.hash = function (key) { var index = 0; if (typeof key == "string") { for (var i = 0; i < 3; i++) { index = index + isNaN(key.charCodeAt(i)) ? 0 : key.charCodeAt(i); } } else if (typeof key == 'object') { index = 0; } else if (typeof key == 'number') { index = isNaN(key) ? 7 : key; } else { index = 1; } return index % 8;}var map = new Mymap(); //使用构造函数的方式实例化mapmap.set('name','zwq');map.get('name');map.has('name);到此,关于"ES6 Map原理是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
对象
属性
位置
数据
原理
学习
函数
指向
链条
元素
指针
更多
分配
存储
帮助
实用
接下来
个位
代码
优势
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
多条件筛选去重复的数据库
网络安全目前通用技术有哪些
毕业论文里面的数据库实体联系
中国数据库分布
114这个dns服务器安全吗
ntp服务器设置
交换机与网络安全
ps远程游玩连接不到服务器
tbv 数据库
钉钉内网穿透ssh服务器
网络安全安全浙江大学
部队网络安全简笔画
方舟服务器名字在哪搜索
武装突袭3搭建服务器
快递公司 数据库 er图
关于维普数据库正确的说法是
网络安全大寨
东方电子电力网络安全监测装置
组态王软件开发环境
宜搭软件开发
光遇国际服务和服务器合并了吗
上半年5G网络技术ppt
采购3个月范围内的资料数据库
苏州倍思网络技术有限公司
金融科技互联网公司排名
服务器硬盘接口有哪些种类
招银网络科技 软件开发
mc国际版1.17.11服务器
服务器安全狗配置开放端口
准备上市的网络安全公司