set数据结构

JavaScript ES6 引入了Set数据结构,它类似于数组但不允许重复值。Set的成员是无序的,不可通过下标访问。创建Set可以通过Set构造函数,添加成员使用add(),删除成员使用delete(),检查成员是否存在使用has(),清除所有成员使用clear()。Set提供了keys()、values()、entries()和forEach()进行遍历,遍历顺序与插入顺序相同。Set常用于数组和字符串去重,以及存放DOM元素等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Set数据结构
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set 本身是一个构造函数,用来生成 Set 数据结构
Set的基本用法
数组是一系列有序的数据集合 [1,3,5,3] Set是一系列无序、没有重复值得数据集合 [1,3,5]
Set没有下标去表示每一个值,所以Set是无序的,,也不能像数组那样通过下标去访问Set的成员
//创建数组的方式 console.log([1,2,3]); console.log(new Array(1,2,3)) //创建set集合 const s = new Set(); s.add(12); s.add(34); s.add(34);//重复的数据添加不进去 console.log(s);
Set实例的方法和属性
Set 结构的实例有以下属性
1、Set.prototype.constructor :构造函数,默认就是 Set 函数。
2、Set.prototype.size :返回 Set 实例的成员总数。
Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。
四个操作方法:
1、Set.prototype.add(value) :添加某个值,返回 Set 结构本身。
2、Set.prototype.delete(value) :删除某个值,返回一个布尔值,表示删除是否成功。
3、Set.prototype.has(value) :返回一个布尔值,表示该值是否为 Set 的成员。
4、Set.prototype.clear() :清除所有成员,没有返回值。
const s=new Set();//构造函数创建对象
s.add(1).add(2).add(2);//s: 1 2 // 注意2被加入了两次
s.size // 2 s.has(1) // true 判断是否有某个成员
s.has(2) // true s.has(3) // false
s.delete(2);//删除指定成员 如果删除不存在的成员不会报错
s.has(2) // false
s.clear()//清空成员
遍历操作
Set 结构的实例有四个遍历方法,可以用于遍历成员。
1、Set.prototype.keys() :返回键名的遍历器
2、Set.prototype.values() :返回键值的遍历器
3、Set.prototype.entries() :返回键值对的遍历器
4、Set.prototype.forEach() :使用回调函数遍历每个成员
需要特别指出的是, Set 的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用 Set 保存一个回 调函数列表,调用时就能保证按照添加顺序调用

  1. keys() , values() , entries()
    let set = new Set([‘red’, ‘green’, ‘blue’]);
    //keys 键名的遍历器
    for (let item of set.keys()) { console.log(item);// // red // green // blue }
    //values 键值的遍历器 for (let item of set.values()) { console.log(item); // red // green // blue }
    //键值对的遍历器 (在浏览器中看到的是数组)
    for (let item of set.entries()) { console.log(item); //[“red”, “red”] // [“green”, “green”] // [“blue”, “blue”] }
  2. forEach()

Set 结构的实例与数组一样,也拥有 forEach 方法,用于对每个成员执行某种操作,没有返回值。 forEach 方法的参数就是一个处理函数。该函数的参数与数组的 forEach 一致,依次为键值、键 名、集合本身(上例省略了该参数)。这里需要注意,Set 结构的键名就是键值(两者是同一个 值),因此第一个参数与第二个参数的值永远都是一样的。
let set = new Set([1, 4, 9]); set.forEach((value, key) => console.log(key + ’ : ’ + value)) // 1 : 1 // 4 : 4 // 9 : 9
forEach中this的指向
let s = new Set([1, 3, 4, 5, 6])
s.forEach(function (value, key, set) { // Set 中 value = key
console.log(value, key, set === s);
console.log(this);//forEach不传入第二个参数,this指向的是window对象。如果传入参 数,this指向的是传入的对象 }, document);
console.log(s);
Set构造函数的参数

  1. 数组、字符串、arguments、NodeList、Set等
    const set1 = new Set([1, 2, 4]); const set2 = new Set(‘helloworld’);
    const set3 = new Set(set1); console.log(set3)
    console.log(set3 === set1);//false
    Set的注意事项
  2. 判断重复的方式
    Set对重复的值得判断基本遵循严格相等(=
    但是对于NaN的判断与
    =不同,Set中的NaN等于NaN
    const s = new Set([2, 4, 2]); console.log(s);// 2 4 console.log(NaN === NaN);//false
    ///Set中的NaN等于NaN const s1 = new Set([NaN, 4, NaN]);//NaN 4 console.log(s1)
  3. 2.什么时候使用Set
    数组或字符串中去重
    不需要通过下标访问,只需要遍历时
    为了使用Set提供的方法和属性时(add delete clear has forEach size)
    Set的应用
  4. 数组去重
    // 去除数组的重复成员 const items = […new Set([1, 2, 3, 4, 5, 5, 5, 5])];
    //Array.from方法可以将 Set 结构转为数组。 const item = new Set([1, 2, 3, 4, 5]); const array = Array.from(item);
  5. 字符串去重
    const s = new Set(‘helloworld’); console.log([…s].join(‘’));
    // 字符串去重 //去除字符串里面的重复字符
    […new Set(‘ababbc’)].join(‘’);// “abc”
  6. 存放DOM元素//存放DOM元素 const elems=new Set(document.querySelectorAll(“p”)); console.log(elems) elems.forEach(function(ele){ ele.style.color = ‘red’; })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值