【ES6】Set 用法


Set

在ES6中,Set是一种新的数据结构,它允许你存储唯一的值,而不是像数组那样可以存储重复的值。Set在ES6中提供了一种更加高效、方便的数据结构,可以帮助我们更好地处理数据。Set的作用主要有以下几个方面:

  1. 去重:Set中存储的值都是唯一的,可以用来去除数组中的重复项。
  2. 快速查找:Set内部使用了哈希表,因此查找速度非常快。
  3. 遍历:Set提供了迭代器,可以很方便地遍历所有的值。
  4. 数组去重:可以使用Set将数组去重,然后再转换回数组。
  5. 交集、并集、差集:Set提供了一些方法,可以方便地进行集合的操作,如并集、交集、差集等。
  6. 与Map的结合使用:Set可以与Map结合使用,用来保存一些键值对的键,而不需要保存对应的值。

一、创建

参数值不能有重复项

    // 参数必须是可遍历对象,值不能有重复项
    var set = new Set([1, 2, 3, [4], { name: 'zs' }, 3])
    console.log(set);  // Set(5) {1, 2, 3, Array(1), {…}}

二、用法

1.add()方法

    // 1.add() 向Set中添加元素
    set.add(4)
    console.log(set);  // Set(6) {1, 2, 3, Array(1), {…}, …}
    set.add([4])
    console.log(set);  // Set(7) {1, 2, 3, Array(1), {…}, …}
    set.add('3')
    set.add(3)
    console.log(set);  // Set(8) {1, 2, 3, Array(1), {…}, …}

2.size 属性

    // 2.size 属性 获取Set中的元素数量
    console.log(set.size);  // 8

3.delete()方法

    // 3.delete()方法  删除Set结构中指定的值,删除成功返回true,删除失败返回false
    console.log(set.delete(2));  // true
    console.log(set);  // Set(7) {1, 3, Array(1), {…}, 4, …}
    console.log(set.delete(5));  // false
    console.log(set);  // Set(7) {1, 3, Array(1), {…}, 4, …}
    console.log(set.delete([4]));  // false
    console.log(set);  // Set(7) {1, 3, Array(1), {…}, 4, …}

4.clear()方法

    // 4.clear()方法  清空Set中的所有元素
    set.clear()
    console.log(set);  // Set(0) {size: 0}

5.has()方法

    // 5.has()方法  判断Set结构中是否含有指定的值,有返回true,没有返回false
    console.log(set.has(3));  // true
    console.log(set.has(2));  // false
    console.log(set.has([4]));  // false

6.entries()方法

    // 6.entries()  返回一个键值对的遍历器
    console.log(set.entries());  // SetIterator {1 => 1, 3 => 3, Array(1) => Array(1), {…} => {…}, 4 => 4, …}
    for (let [k, v] of set.entries()) {
        // console.log(k);  // 1 3 [4] {name: 'zs'} 4 [4] 3
        console.log(v);  // 1 3 [4] {name: 'zs'} 4 [4] 3
    }

7.keys()方法,values()方法

    // 7.keys()  返回键名的遍历器
    console.log(set.keys());  // SetIterator {1, 3, Array(1), {…}, 4, …}
    // values() 返回键值的遍历器
    console.log(set.values());  // SetIterator {1, 3, Array(1), {…}, 4, …}

8.forEach()方法

    // 8.forEach() 遍历Set中的所有元素
    set.forEach((item, index) => {
        // console.log(item);  // 1 3 [4] {name: 'zs'} 4 [4] 3
        console.log(index);  // 1 3 [4] {name: 'zs'} 4 [4] 3
    })

三、用Set使数组去重

    // 数组去重
    var arr = [1, 2, 5, 4, 6, 2, 5, 3, 6, 2, 7, 2, 8, 1, 9, 0]
    var newArr = new Set(arr)
    console.log([...newArr]);  // (10) [1, 2, 5, 4, 6, 3, 7, 8, 9, 0]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: ES6中的Set和Map是两种新增的集合类型。Set是一种无重复值的集合,可以通过new Set()来创建。它具有add方法用于向集合中添加元素,has方法用于判断集合中是否存在某个元素,clear方法用于清空集合。Set也可以用于数组去重,通过new Set(\[...\])的方式将数组转换为Set,利用Set的特性去除重复值。\[1\] Map是一种键值对的集合,可以通过new Map()来创建。它具有set方法用于向集合中添加键值对,get方法用于获取指定键名对应的值,has方法用于判断集合中是否存在某个键名,clear方法用于清空集合。Map的键名可以是任意数据类型,包括引用值,但需要注意的是,引用值作为键名时,需要使用相同的引用地址才能获取到对应的值。\[2\] Set和Map都可以使用for...of循环或forEach方法进行遍历。在Set中,forEach的第二个参数是集合的元素,因为Set中不存在下标。而在Map中,forEach的第一个参数是键值对的值,第二个参数是键值对的键名。\[3\] 总结来说,Set和Map是ES6中新增的集合类型,Set用于存储无重复值的集合,Map用于存储键值对的集合。它们提供了一些方法来操作集合,如添加、获取、判断是否存在等。在使用时需要注意它们的特性和方法的使用方式。 #### 引用[.reference_title] - *1* *2* [ES6中的Map和Set详解](https://blog.csdn.net/m0_45093055/article/details/126430467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ES6中的set与map](https://blog.csdn.net/weixin_44247866/article/details/127561391)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值