JavaScript之Set和Map对象

114 阅读2分钟

Set

详细说说Set(一个属性八个方法)

Set是ES6提供的新的数据结构,类似于数组。特点是Set数据结构的元素不能是重复的。Set本身是一个构造函数。

let set=new Set()
console.log(set.__proto__)

通过输出Set的原型对象。可以看到Set上面有size属性和add,delete,has,clear,values,keys,entries,foreach方法 Snipaste_2022-09-08_11-10-53.png

        let set=new Set(['a',2,3,4,5])
        console.log(Object.prototype.toString.call(set));//返回[object Set]
        console.log(set.add('b'))      //调用add方法返回添加后的set Set(6)  {'a',2,3,4,5,'b'}
        console.log(set.delete(5))     //返回true
        console.log(set.size)          //返回5
        console.log(set.has(2));       //返回true
        // set.clear()
        console.log(set);              //{'a',2,3,4,'b'}
        console.log(set.keys())
        console.log(set.values())      //keys和values返回的都是一样的
        console.log(set.entries())
        set.forEach((a,b,c)=>{
            //a是key,b是value,c是指向整个set
            console.log(a,b,c);
        })
Snipaste_2022-09-08_11-21-17.png Set是可以遍历的,所以可以用for...of..来遍历,也可以用...扩展运算符来扩展。因为扩展运算符的本质就是for...of....
同时,Set是类数组对象,所以可以用Array.from来进行转换。**Set与arguments不同的是,arguments有length属性,而Set的实例本身具有的是size属性**
let arr = Array.from(set)
 for (let i of set) {
 console.log(i)
}
let arr1 = [...set]
console.log(arr1);

Map结构(一个属性size和9个方法)

Map和Set不同的是。Map多了set和get1方法,没有add方法。而Set相反,有add方法,没有set和get方法。 ES6提供了Map数据结构。js的对象Object只能用字符串当键名(字符串-值),而Map可以让任意值当键名(值到值),甚至可以是对象。

    let map=new Map([[{name:'xujii'},312019],[{name:'tom'},312020],['a',312]])
    console.log(map)
    console.log(map.get(1)); //返回undefined
    console.log(map.get({name:'xujii'})); //返回undefined  因为没有找到{name:'xujii'}所对应的地址
    console.log(map.get('a'));//返回312
    console.log(map.set('a',111)); 返回map对象
    console.log(map.set('b',222));
    console.log(map.has({name:'xujii'}));  //返回false,因为map存的是地址
    console.log(map.has('a')); //true
    console.log(map.has('b'));  //true
    console.log(map.delete('a'));  //true
    console.log(map);
    // console.log(map.clear());
    // console.log(map);
    console.log(map.keys());  //返回迭代器对象
    console.log(map.values());  //返回迭代器对象
    console.log(map.entries());  //返回迭代器对象

Map和Set的区别

1.构造map的参数是一个二维数组,构造set的参数是一维数组。set会避免重复,而map如果键名重复则会覆盖。
2.map和set都是es6推出的新数据结构,某些属性和方法都是类似的,并且都有迭代器。同时都可以说是类数组对象,可以通过Array.from变成Array.
3.map和set他们可以存储的数据类型广泛。
4.集合 是以 [value, value]的形式储存元素(键值键名是完全一样的),字典 是以 [key, value] 的形式储存。

参考资料

Set 和 Map 数据结构