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方法
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);
})
同时,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] 的形式储存。