zoukankan      html  css  js  c++  java
  • ES6学习之路7----set数据结构

    什么是set

    ES6提供了数据结构Set。类似于数组,但是没有重复值

    1.Set本身是一个构造函数,用来生成Set数据结构

    对set数据结构进行操作的方法

    1. add(value):添加某个值,返回Set结构本身
    2. delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
    3. has(value):返回一个布尔值,表示该值是否为Set的成员。
    4. clear():清除所有成员,没有返回值
    let set = new Set();
    let arr = [1,2,3,4,5,6,5,4,7,3];
    //利用add方法将每个值添加到set中
    arr.forEach(current => set.add(current));
    
    console.log(set);//{1, 2, 3, 4, 5, 6, 7}
    
    //循环set,查看每个成员
    for(let val of set){console.log(val);}//1 2 3 4 5 6 7
    
    //利用delete删除5,再查看set
    console.log(set.delete(5));//true
    console.log(set);//{1, 2, 3, 4, 6, 7}
    //删除8,由于不存在,所以删除不成功,返回false
    console.log(set.delete(8));//false
    
    利用has判断成员是否存在
    console.log(set.has(4));//true
    console.log(set.has(9));//false
    
    利用clear清除所有成员
    set.clear();
    console.log(set);//Set(0) {}

    对set数据结构进行操作的属性size

    set数据结构能够用size属性访问数据结构的成员总数,而且set数据结构可以接受一个数组(或者类数组对象)作为参数,用来初始化。

    let set = new Set([1,2,3,4,5,6]); 
    console.log(set.size);//6

    实际应用:利用set数据结构的没有重复值性质,对数组去重。

    //数组去重:
    let arr = [1,1,1,2,2,3,4,5,6,5,6];
    console.log([...new Set(arr)]);//[1, 2, 3, 4, 5, 6]
    console.log(Array.from(new Set(arr)));//[1, 2, 3, 4, 5, 6]
    
    //使用 Set 实现并集(Union)、交集(Intersect)和差集(Difference)
    let a = new Set([1, 2, 3, 4]);
    let b = new Set([5, 4, 3, 2]);
    
    // 并集
    let union = new Set([...a, ...b]);
    console.log(union);// Set {1, 2, 3, 4, 5}
    
    // 交集
    let intersect = new Set([...a].filter(x => b.has(x)));
    console.log(intersect);// set {2, 3, 4}
    
    // 差集
    let difference = new Set([...a].filter(x => !b.has(x)));
    console.log(difference);// Set {1}

    将set数据结构转化为数组的方法:

    1. 利用扩展运算符(…)———–[…new Set(arr)];
    2. 利用Array.from()方法——–Array.from(new Set(arr));
    3. 利用for…of…循环push。

    Set 加入值的时候,不会发生类型转换,所以5和”5”是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。

    let set = new Set();
    set.add(5);
    set.add("5");
    console.log(set);//Set(2) {5, "5"}
    
    set.add(NaN);
    set.add(NaN);
    console.log(set);//Set(3) {5, "5", NaN}
    
    set.add({});
    set.add({});
    console.log(set);//Set(5) {5, "5", NaN, {…}, {…}}

    对set数据结构进行遍历的方法

    1. keys():返回键名的遍历器
    2. values():返回键值的遍历器
    3. entries():返回键值对的遍历器
    4. forEach():使用回调函数遍历每个成员
    let set0 = new Set([1,2,3,4,3,5,4,6,5,7,4]);
    //keys()
    for(let key of set0.keys()){console.log(key)}//1 2 3 4 5 6 7
    
    //values()
    for(let key of set0.values()){console.log(key)}//1 2 3 4 5 6 7
    
    //entries()
    for(let key of set0.entries()){console.log(key)}//[1,1] [2,2] [3,3] [4,4] [5,5] [6,6] [7,7]
    
    //forEach()
    set0.forEach(val => console.log(val));//1 2 3 4 5 6 7

    总结:

    1. set数据结构配合扩展运算符或者Array.from()方法能够去重;
    2. set数据结构实例化方法和属性:(add有返回值、delete有返回值、has有返回值、clear没有返回值)对其进行操作,size获取数据结构的成员总量;
    3. set数据结构的遍历方法keysvaluesentriesforEachmapfilterfor…of…
    4. 向set数据结构添加值时,采用的算法是“Same-value equality”,类似于精确相等运算符,注意“类似于”,区别就在于NaN对象在“Same-value equality”算法是相等的(NaN===NaN//false)。
    5. 添加5和“5”或者{}和{}“Same-value equality”算法不相等。
    6. “Same-value equality”算法除了NaN,其他都遵循精确相等运算符(===)。

    其他

    我的博客,欢迎交流!

    我的CSDN博客,欢迎交流!

    微信小程序专栏

    前端笔记专栏

    微信小程序实现部分高德地图功能的DEMO下载

    微信小程序实现MUI的部分效果的DEMO下载

    微信小程序实现MUI的GIT项目地址

    微信小程序实例列表

    前端笔记列表

    游戏列表

  • 相关阅读:
    异常之【You have an error in your SQL syntax】
    Android 回调的理解,觉得写得好就转过来。。。收藏一下
    git 解决冲突方法
    最重要的“快捷键” IntelliJ IDEA
    Git 还没push 前可以做的事(转)
    android JNI(转)
    Windos下Android(ADT Bundle)配置NDK的两种方法------ADT、Cygwin、NDK配置汇总(转)
    warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    android-ndk-r7b编译环境Cygwin工具搭建及配置(转)
    Eclipse Java常用快捷键(Eclipse Shortcut Keys for Java Top10)(转)
  • 原文地址:https://www.cnblogs.com/linewman/p/9918509.html
Copyright © 2011-2022 走看看