• es6中Set和Map数据结构


    1. ES2015 Set 数据结构

    ES2015 中提供了一个全新的数据结构,和数组类似,但其中的元素不允许重复,也就是每个元素在其中都是唯一的,我们可以称之为:集合。set认为两个NaN是相等的。

    • 集合中新增元素
    const s = new Set()
    // add 方法会返回集合本身,因此可链式调用
    s.add(1).add(2).add(3).add(2)
    console.log(s)  // Set {1, 2, 3}  重复添加的元素会被忽略
    
    • 集合的遍历
    // 方法 1 使用 Set 自带 forEach 方法
    s.forEach(i => console.log(i))
    // 方法 2 使用 ES2015 新语法 for 
    for (let i of s){
        console.log(i)
    }
    
    • 获取集合长度等自有方法
    // 1.获取集合长度
    console.log(s.size)
    
    // 2.判断集合当中是否存在某个值
    console.log(s.has(100))  // false
    
    // 3.删除集合中某个指定值,方法会返回是否删除成功
    console.log(s.delete(3))  // true
    
    // 4.清空集合
    s.clear()
    console.log(s)  // Set {}
    
    • 集合能够便于数组去重
    const arr = [1, 2, 1, 3, 4, 2]
    // 方法 1
    const result_1 = Array.from(new Set(arr))
    console.log(result_1)  // [1, 2, 3, 4]
    
    // 方法 2
    const result_2 = [...new Set(arr)]
    console.log(result_2)  // [1, 2, 3, 4]

    1. set数据结构自带的add()方法
      const s4=new Set();
                  // 向set结构中添加值使用add方法
                  s4.add('a').add('b');
                  console.log(s4.size);
    2. 向set结构中删除使用delete()方法

      // 从set结构中删除值用到的方法是delete
      const r1=s4.delete('a');
      console.log(s4.size);
      console.log(r1);

    3. 从set结构中获取数据长度用到的方法是size
      const s4=new Set();
                  // 向set结构中添加值使用add方法
                  s4.add('a').add('b');
                  console.log(s4.size);
    4. 判断某个值是否是set数据结构中的成员has方法

      // 判断某个值是否是set数据结构中的成员使用has
      const r2=s4.has('c');
      console.log(r2);

    5. 遍历set数据结构从中取值forEach方法

      // 遍历set数据结构从中取值
      const s5=new Set(['a','b','c']);
      s5.forEach(value=>{
      console.log(value)
      })

    6. clear() 清除所有成员,没有返回值。

    2. ES2015 Map 数据结构

    Map 和对象很像,它们本质上都是键值对集合。不同的是,对象的键只能存放字符串类型,这就会导致我们在存放复杂数据时遇到一些问题,如下所示:

    // object 键上存放复杂数据时遇到的问题
    const obj = {}
    obj[true] = 'value'
    obj[123] = 'value'
    obj[{ a: 1 }] = 'value'
    console.log(Object.keys(obj))  // ['123', 'true', '[object Object]']
    

    Map 就是为了解决上面的问题诞生的,Map 是严格意义上的键值对集合,它能够映射两个任意类型数据之间的对应关系。const m = new Map()const tom = { name : 'mn' }

    // 1.设置键值映射关系
    m.set(tom, 90)  
    console.log(m)  // Map { { name: 'tom' } => 90}
    // 2.根据键获取对应值
    m.get(tom)
    // 3.判断某键是否存在
    m.has(tom)
    // 4.删除某个键
    m.delete(tom)
    // 5.清空所有键
    m.clear()
    // 6.遍历所有键值,需要注意的是首个参数是值,第二参数是键
    m.forEach((value, key) => {
        console.log(value, key)
    })





    三、set的适用场景
           //1.set去重数组中重复成员的方法
                arry=[ 2, 3, 4 ,4];
                arry=[...new Set(arry)];
                console.log(arry);
                //2.set去除字符串中重复的字符
                str='abbccddff';
                str=[...new Set(str)].join('');
                console.log(str);

            //Array.from方法可以将Set结构转为数组,直接将set放到[]中也可以将其转化为数组
            const items=new Set([1,2,3,4]);
            const array1=Array.from(items);
            console.log(array1);

            //这就提供了去除数组重复成员的另一种方法。
            function dedupe(array) {
            return Array.from(new Set(array));
            }
            console.log(dedupe([1, 1, 2, 3]));

     

    四、map的适用场景

    待补全
     
    勤学似春起之苗,不见其增,日有所长; 辍学如磨刀之石,不见其损,日所有亏!
  • 相关阅读:
    Swift无限滚动的FSPagerView
    Swift 中map、flatMap、compactMap、filer、reduce的使用总结
    Swift SnapKit自动布局的使用
    Swift UIScrollView懒加载的使用
    SwiftJson的使用
    SWIFT_VERSION '5.0' is unsupported, supported versions are: 3.0, 4.0...
    Swift 一个xib引用另外一个xib
    Swift xib或者storyboard添加圆角或者边框
    Swift使用Alamofire
    Swift中使用OC的类或者三方框架
  • 原文地址:https://www.cnblogs.com/qiaozhiming123/p/14644558.html
Copyright © 2020-2023  润新知