ES6基本的语法(十一) Map

23 篇文章 0 订阅
20 篇文章 0 订阅

Map

  • Map 是 ES6 提供的构造函数,能造出一种新的存储数据的结构。本质上为键值对的集合
  • key 对应 value,key 和 value 唯一,任何值都可以当属性
  • 可以让对象当属性,去重

基本用法

let op = new Map([["name","ccc"],["age","3"]])
console.log(op);
// Map(2) {"name" => "ccc", "age" =>"3"}

let op = new Map([[{},"ccc"]])
console.log(op);
// Map(2) {{} => "ccc"}

Map 中任何值都可以当属性,上面的代码中,用了一个空对象当做属性。

Map 上的方法


// set(); 增加属性和属性值
let op = new Map();
op.set('name','ccc');
op.set({},'xxx');

// get(); 取出属性值
op.get("name"); // 输出 ccc
// 在取值原始值的时候要用一个变量去接受
const obj = {};
op.get(obj); // 输出 xxx

// delete 删除 不举例
// clear 清空 不举例
// has 是否有属性 不举例

// size map 构造对象出来的长度
op.size() // 输出 4

// keys 拿到属性
op.keys() // MapIterator {"name", {}}

// forEach 遍历
op.forEach(ele =>{
    console.log(ele)
    // 输出 ccc , xxx
})

// for of 遍历
for(let porp of op) {
    console.log(porp);
    // 输出 ["name","ccc"] [{},"xxx"] 返回键值对
    // 想要拿到属性和值
    console.log(porp[0], porp[1])
}

模拟实现 Map

原理实现

  • 链接链表
  • hash算法
链接链表

let a = {
    name: 'ttt',
    next: b
}

let b = {
    name: 'xxx',
    next: c
}

let c = {
    name: 'ccc',
    next: null
}

链式存储

这种 a.next 可以访问到 ba.next.next 可以访问到 c,连成链的方式叫链表,Map 在存值的时候就用到了链表的概念。在 Map 里面的成员都存到了对象里面去,之后再放到数组里面去

let op = new Map([['name1', 'ttt'],['name2', 'xxx']]);

/* 把 Map 里面的成员存到对象里面去 */

{
    key: 'name1',
    value: 'ttt'
}
{
    key: 'name2',
    value: 'ccc'
}

// 桶
[
    {},
    // 链式存储
    {
        next:{
            key: 'name1',
            value: 'ttt',
             // 按照 key 值固定对象 通过 hash 算法固定
            next: {
                key: 'name2',
                value: 'ccc'
            }
        }
    },
    {},
    {},
    {},
    {},
    {},
    {}
]

上面的代码,就是把 Map 里面的成员变量存到对象里面去,在通过数组链式存储,通过 key 值利用 hash 固定对象。利用 hash 算法的主要目的是要把不定范围的值转换成特定范围的值。比如在存值的时候 key 的类型是不一样的,可能是 String、Number,所以要把这些不定范围的值转换成特定范围的值。

Map 实现原理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值