es6 —— Set与Map数据结构

我就是我 2023-06-10 03:29 122阅读 0赞
一、 Set数据结构
1. 基本用法
  1. ES6提供了新的数据结构Set,它类似于数组,但是成员的值都是唯一的,没有重复的值。
  2. Set本身是一个构造函数,用来生成Set数据结构
  3. 当向Set对象中加入两个空对象时,其是否两者不同,即任何两个对象都是不相等的。
  4. 向Set实例加入值时,不会发生类型转换,即在加入值时的判断算法为“Same-value-zero equality”,它类似于===。主要的区别是:向Set中加入值认为NaN等于自身,而精确相等运算符,即===认为NaN不等于自身。
  5. Set函数可以接受一个数组/一个字符串作为参数用来初始化。
  6. 可通过Set数据结构来去除数组中和字符串中重复的成员、重复字符。
  7. ...扩展运算符可以将Set集合转换成数组,说明Set集合是定义了遍历器的对象。
  1. //①
  2. const a = new Set();
  3. [1,2,3,4,2,23,1].forEach(x=>{
  4. a.add(x)
  5. });
  6. console.log(a);//[1,2,3,4,23]
  7. //②
  8. const s = new Set([1,2,3,1,2,3,4,5]);
  9. console.log(s);//[1,2,3,4,5]
  10. s.size;//5
  11. //③ 去除数组中重复的成员
  12. const a = [1,2,2,3,4,5,5,6];
  13. const s = new Set(a);//s:[1,2,3,4,5,6]
  14. //④ 去除字符串中重复的字符串
  15. const str = "123sss456";
  16. const s = [...new Set(str)].join('');
  17. s;//123s456
2. Set实例的相关方法

对象.add(值):向Set实例中添加元素
对象.size:返回Set实例中元素的个数
对象.delete(被删除元素):返回是true/false,如果删除成功返回true,如果删除失败返回false。其中被删除元素若在实例中未找到则删除失败。被删除元素也是按照类似===方式在实例中匹配的
对象.has(判断元素):返回true/false。如果实例中包含参数则返回true,否则返回false
对象.clear():清除实例中所有元素,无返回值
⑥ 遍历操作:

  1. 由于Set实例没有键只有值,故其keys()方法和values()方法的行为完全一致
  2. Set 结构的实例默认可遍历,它的默认遍历器生成函数就是它的values方法。故可以省略values()方法直接遍历Set结构的实例。
  3. 对象.keys():返回键名的遍历器
  4. 对象.values():返回键值的遍历器
  5. 对象.entries():返回键值对的遍历器
  6. 对象.forEach(fn):使用回调函数遍历每个成员
  1. let set = new Set(['red', 'green', 'blue']);
  2. for (let item of set.keys()) {
  3. console.log(item);
  4. }
  5. // red
  6. // green
  7. // blue
  8. for (let item of set.values()) {
  9. console.log(item);
  10. }
  11. // red
  12. // green
  13. // blue
  14. for (let item of set.entries()) {
  15. console.log(item);
  16. }
  17. // ["red", "red"]
  18. // ["green", "green"]
  19. // ["blue", "blue"]
二、 Map数据结构

js的对象(Object)本质上是键值对的集合(Hash结构),但是传统上只能用字符串当做键。为了解决这个问题,ES6提供了Map数据结构。它类似于对象,也是键值对的集合。但是键不限于字符串,各种类型的值(包括对象)都可以当做键。也就是说,Object结构提供了”字符串-值”的对应,Map结构提供了”值-值”的对应。

  1. const data = { };
  2. const element = document.getElementById('myDiv');
  3. data[element] = 'metadata';
  4. data['[object HTMLDivElement]'] // "metadata"
1. Map实例的相关方法

对象.set(键,值):向Map实例添加键值对
对象.get(键):通过键值在Map实例中取得对应的值
对象.has(键):返回true/false。判断Map实例中是否有该键值对。
对象.delete(键):返回true/false。删除Map实例中参数键对应的键值对
对象.size:返回Map实例中键值对的个数
对象.clear():清除Map实例内的所有键值对
⑦ 遍历操作

  1. 对象.keys():返回键名的遍历器
  2. 对象.values():返回键值的遍历器
  3. 对象.entries():返回键值对的遍历器
2. JSON对象和Map实例互转
① JSON对象转Map实例

Object.keys(json对象):返回json对象的属性集合(返回形式为数组)

  1. let op = {
  2. "name":"张三",
  3. "age":18
  4. }
  5. Object.keys(op);//["name","age"]
  6. let op = {
  7. "name":"张三",
  8. "age":18
  9. }
  10. let m1 = new Map();
  11. for(let key of Object.keys(op)){
  12. m1.set(key,op[key])
  13. }
② Map实例转JSON对象
  1. let op = {
  2. "name":"张三",
  3. "age":18
  4. }
  5. let m1 = new Map();
  6. for(let key of Object.keys(op)){
  7. m1.set(key,op[key])
  8. }
  9. let jsonStr = { };
  10. for(let item of m1.keys()){
  11. jsonStr[item] = m1.get(item);
  12. }

发表评论

表情:
评论列表 (有 0 条评论,122人围观)

还没有评论,来说两句吧...

相关阅读