set
1.set是一系列无序,没有重复值的集合
const s = new Set(); //新建空的set集合
console.log(s);
方法
添加值 s.add(1)
const s = new Set();
s.add(1) //添加值
s.add(2).add(3) //可以多次添加
console.log(s);
删除值 s.delete(3)
const s = new Set();
s.add(1) //添加值
s.delete(1) //删除值
console.log(s);
清空所有值 s.clear()
const s = new Set();
s.add(1) //添加值
s.clear() //清空所有的值
console.log(s);
判断某个值是否在set里 s.has(1)
const s = new Set();
s.add(1) //添加值
console.log(s.has(1)); //判断某个值是否存在set里
console.log(s);
获取set集合的长度 s.size
const s = new Set();
s.add(1) //添加值
s.add(2).add(3) //可以多次添加
console.log(s.size); //获取set的长度
set构造函数的参数,参数是数组形式,并且会自动去重
const s = new Set([1, 2, 1]) //要以数组的形式传参
console.log(s); //输出1,2 set会自动去重
set也可以创建这种形式,也必须体现出键值对,并且每个值都不重复
const s = new Set([
['name', 'zs'],
['sex', 18]
])
去重的判断必须是全等(===),但是NaN不同,Set中NaN等于NaN
map
map是键值对的集合
const m = new Map() //新建一个map集合
console.log(m);
方法
使用set添加新成员 m.set('name', 'alex')
如果键名已经存在,后添加的键值对会覆盖之前的
const m = new Map()
m.set('name', 'alex') //添加新成员
console.log(m);
根据键名获取map值 m.get('name')
如果获取的成员不存在返回undefined,否则返回获取到的值
const m = new Map()
m.set('name', 'alex')
console.log(m.get('name')); //根据键名获取map值
删除值 m.delete('name')
如果删除的成员不存在,什么都不会发生,也不会报错
const m = new Map()
m.set('name', 'alex')
m.delete('name') //根据键名删除对应的值
console.log(m);
清空所有值 m.clear()
const m = new Map()
m.set('name', 'alex')
m.clear() //清空所有值
console.log(m);
获取map的长度 m.size
const m = new Map()
m.set('name', 'alex')
console.log(m.size); //获取长度 里面只有一个额值所以长度为一
map构造函数的参数
只能传二维数组,并且必须体现键值对
const m = new Map([
['name', 'alex'],
['age', 18]
])
和对象不同的是对象一般用字符串当作键,但是基本数据类型和引用数据类型都可以当作键名
map里相同键名后面的会覆盖前面的
判断键名是否相等遵循全等(===),但NaN不同,NaN等于NaN
赋值不全等 m1!=m
const m = new Map([
['name', 'alex'],
['age', 18],
])
const m1 = new Map(m) //把m复制给m1
console.log(m1 === m); //false
遍历forEach
map
const m = new Map([
['name', 'alex'],
['age', 18],
])
m.forEach(function (value, key, map) {
console.log(value, key,map); //分别输出值、键、map本身
});
map 值和键以字符串形式输出
set
普通遍历
const s = new Set([1, 2, 'name', 3, 'age'])
s.forEach(function (value, key, set) {
console.log(value, key); //分别输出值、健、set集合
});
遍历set集合里的数组
const s = new Set([
['name', 'zs'],
['sex', 18]
])
s.forEach(function (value, key, set) {
console.log(value, key, set); //分别输出值、健、set集合
});
set 值和键因为里面还套了一个数组所以以数组的形式输出
总结:
在需要key,value结构时,需要字符串以外的值做键时,要使用map提供的方法和属性时用map
数组或字符串去重时候,不需要通过下标访问,只需要遍历时,要使用set提供的方法和属性时用set
set和map的区别:
map是键值对,set是集合
map可以通过get方法获取值,set不能因为他只有值
map是二维数组,set是一维数组
set方法值是唯一的会根据值自动区重,map根据键名去重,值可以重复