keyed-collection

<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>


转载于:https://www.cnblogs.com/techmessage/p/10176930.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值