<pre>
简要:
介绍集合数据,通过key排序的,Map Set 对象
可以迭代
</pre>
<pre>
es6 引进了新的数据结构用来建立 数据中间的映射关系,Map对象
就是key -- value 键值对
</pre>
<script>
// 常用api
// set get has for...of
var sayings = new Map();
// 设值
sayings.set(‘dog‘, ‘woof‘)
sayings.set(‘cat‘, ‘meow‘)
// console.log(sayings)
// console.log(sayings.size); // 获取大小
// 取值 根据key取value,没有key返回undefined
sayings.get(‘dog‘); // woof
sayings.get(‘hello‘); //undefined,
// has 判断是否有key
sayings.has(‘dog‘); // true
// for...of 遍历
for (const [k, v] of sayings) {
// console.log(k, v);
}
// clear 清空
sayings.clear();
</script>
<pre>
Object 和 Map 对比 简写 Object O Map M
1. O 的 key 只能为 string类型, M 任意类型都可以
2. M 的大小size 直接有属性可以获取, O 没有
3. M 的遍历 顺序是根据元素的插入顺序一致的
4. O 有原型对象,
WeakMap 对象
1. ‘弱‘ Map类型, 特点是key的类型只能为对象类型
</pre>
<pre>
Set
1. Set 对象是 多个数据的集合, 可以按照插入的顺序 迭代元素。
2. Set 对象其内存的 元素 不能重复,必须是唯一的
</pre>
<script>
var mySet = new Set();
// 添加值
mySet.add(1);
mySet.add(‘some text‘);
mySet.add(‘foo‘)
// 判断是否存在
mySet.has(1)
// 删除
mySet.delete(‘foo‘)
// 大小
mySet.size
// 遍历
for (const item of mySet) {
console.log(item);
}
// 将Set 转 Array,数组去重
var res = Array.from(mySet);
console.log(res)
</script>
<script>
// 通过Array 转 Set 实现数组去重
// 1. Array 转 Set 去重 new Set(array)
// 2. Set 转 Array, 类型转数组 Array.from(set)
var duplicatArray = [1,1,2,2,3,3];
var newArray = Array.from(new Set(duplicatArray)) ;
var newArray2 = [...new Set(duplicatArray)] // 展开运算符也可以将set 转 array
console.log(newArray2);
</script>
<pre>
Array 对比 Set
Set的优势
1. 检测某个值是否存在, indexOf的效率是较低的
2. Set 可以通过值直接删除, 数组的话需要知道它的下标
3. 数组indexOf 不能检测 NaN
4. Set 天然去重复数据,某些需要去重的场景非常适合
WeakSet
1. 值只能为对象类型,且不能重复, 用处较少
关于 Map 中key 和Set 中值 相等性的判断依据
1. 遵循 === 全等运算规则
2. -0 和+0 是相等的
3. NaN 与自身是相等的 (与全等 === 运算符相反)
</pre>