es6——新增的数据类型 对象集合map

版权声明:转发博客 请注明出处 否则必究 https://blog.csdn.net/lucky541788/article/details/82631117

特点:
1.类似于对象,本质上是键值对的集合
2.“键”不局限于字符串,各种类型的值(包括对象)都可以当做键
3.对象“字符串-值”,map“值-值”,是一种更加完善的hash结构实现

 {
        let obj = {a: 1}, obj1 = {b: 2}, obj2 = {};
        obj2.c = 3;
        //无论键内传什么 最终都会转换为字符串
        obj2['d'] = 4;
        obj2[obj] = 5;

        console.log(obj.toString());//[object Object]
        console.log(obj, obj1, obj2);//{a: 1} {b: 2} {c: 3, d: 4, [object Object]: 5}
    }

map

    {
        let obj = {a: 1}, obj1 = {b: 2};
        //创建一个map
        const map = new Map([
            ['name', 'bob'],
            ['name', 'lucy'],//自动覆盖重复键值
            ['age', 18],
            [obj, 'good'],
            [obj1, 'bad'],
            [[1, 2], 'hhh']
        ]);

        console.log(map);//Map(5) {"name" => "lucy", "age" => 18, {…} => "good", {…} => "bad", Array(2) => "hhh"}
    }

属性

    {
        let obj = {a: 1}, obj1 = {b: 2};
        const map = new Map([
            ['name', 'bob'],
            ['name', 'lucy'],
            ['age', 18],
            [obj, 'good'],
            [obj1, 'bad'],
            [[1, 2], 'hhh']
        ]);

        console.log(map.size);//5 (重复的键值算是一个)
    }

方法
1.set和get

    {
        let obj = {a: 1}, obj1 = {b: 2},obj2=[1,2];
        const map = new Map([
            [obj, 'good'],
            [obj1, 'bad'],
            [obj2, 'hhh']
        ]);

        //set(支持链式编辑)
        console.log(map.set('friends', ['tom', 'john']).set('num', 20));//Map(5) {{…} => "good", {…} => "bad", Array(2) => "hhh", "friends" => Array(2), "num" => 20}
        console.log(map);//Map(5) {{…} => "good", {…} => "bad", Array(2) => "hhh", "friends" => Array(2), "num" => 20}

        //get(不支持链式编辑)
        console.log(map.get('num'));//20
        console.log(map.get(obj));//good
        console.log(map.get(obj2));//hhh
        console.log(map.get('friends'));//(2) ["tom", "john"]
    }

2.delete(不支持链式编辑)

    {
        let obj = {a: 1}, obj1 = {b: 2};
        //创建一个map
        const map = new Map([
            ['name', 'bob'],
            ['name', 'lucy'],//自动覆盖重复键值
            ['age', 18],
            [obj, 'good'],
            [obj1, 'bad'],
            [[1, 2], 'hhh']
        ]);

        console.log(map.delete('name'));//true
        console.log(map.delete('xxx'));//false
        console.log(map);//Map(4) {"age" => 18, {…} => "good", {…} => "bad", Array(2) => "hhh"}
    }

3.has

   {
        const map = new Map([
            ['name', 'bob'],
            ['age', 18],
        ]);
        console.log(map.has('name'));//true
        console.log(map.has('xxx'));//false
    }

4.clear

 {
        const map = new Map([
            ['name', 'bob'],
            ['age', 18],
        ]);
        console.log(map.clear());//undefined
        console.log(map);//Map(0) {}
    }

5.keys values entries

  {
        const map = new Map([
            ['name', 'bob'],
            ['age', 18],
        ]);
        console.log(map.keys());//MapIterator {"name", "age"}
        console.log(map.values());//MapIterator {"bob", 18}
        console.log(map.entries());//MapIterator {"name" => "bob", "age" => 18}
    }

遍历

  {
        const map = new Map([
            ['name', 'bob'],
            ['age', 18],
        ]);
        map.forEach(function(value,index){
            console.log(index);//name; age
            console.log(value);//bob; 18
        })
    }

注意事项

  {
        const map = new Map([
            ['name', 'bob'],
            ['age', 18],
        ]);
        map.set({},'hhhh');
        map.set({},'aaaa');
        //会创建两个空对象
        console.log(map);//Map(4) {"name" => "bob", "age" => 18, {…} => "hhhh", {…} => "aaaa"}
        console.log({}==={});//false
    }

猜你喜欢

转载自blog.csdn.net/lucky541788/article/details/82631117