翼度科技»论坛 编程开发 JavaScript 查看内容

set用法详解

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18

  • ES6中的Set是一种新的数据结构,类似于数组,用于存储有序的数据。
  • Set没有随机访问的能力,不能通过索引来获取具体的某个元素
  • Set中的元素具有唯一性,不允许存储相同的元素。


  • Set本身是一个构造函数,可以用来实例化Set对象。
  • 通过add()方法可以向Set中添加元素,如果添加的元素已经存在,Set会自动忽略该元素。
  • delete()用于删除元素,
  • setData.size用于获取Set对象的大小(相当于数组的长度),
  • clear()用于清空数据,
  • has()用于判断Set对象中是否存在某个值等。


  • Set对象可以用来进行各种集合操作,例如交集、差集等,具有自动去重唯一性的特点。
 
  1.       //1.声明方式
  2.       let arr = new Set();
  3.       arr.add({ name: "zooey", age: 19 });
  4.       arr.add(20);
  5.       //2.查看元素长度
  6.       const size = arr.size;
  7.       //2.1查看是否有这个元素,可以跟delete配合使用
  8.       console.log(arr.has(20), size);
  9.       //3.根据元素值进行删除
  10.       arr.delete(20);
  11.       //4.重复的元素只会add 1次
  12.       arr.add(3);
  13.       arr.add(3);
  14.       arr.add({ name: "zooeyan", age: 19 });
  15.       console.log(arr);
复制代码
 

 
 
小练习: 数组去重+取交集+取并集+取差集
  1.    
复制代码
  1.      let arr1 = [1, 3, 4, 4, 5, 7, 7, 9, 10],
  2.         arr2 = [2, 4, 6, 8, 8, 10];
  3.       //1.利用set进行去重  将arr转化为set
  4.       let setArr1 = new Set(arr1);
  5.       let setArr2 = new Set(arr2);
  6.       console.log(setArr1, setArr2); //Set(7) {1, 3, 4, 5, 7,9, 10}  Set(5) {2, 4, 6, 8, 10}
  7.       //2.进行比较 -取交集
  8.       const targetArr = [];
  9.       for (const it of setArr2) {
  10.         if (setArr1.has(it)) targetArr.push(it);
  11.       }
  12.       console.log(targetArr); //[4, 10]
  13.       //2.进行比较 -取并集
  14.       const tempArr = [];
  15.       for (const it of setArr2) {
  16.         if (!setArr1.has(it)) tempArr.push(it);
  17.       }
  18.       const bArr = [...tempArr, ...setArr1];
  19.       console.log(bArr); //[2, 6, 8, 1, 3, 4, 5, 7, 9, 10]
  20.       //3.进行比较 -取差集 arr1-arr2
  21.       const cArr = [];
  22.       for (const it of setArr1) {
  23.         if (!setArr2.has(it)) cArr.push(it);
  24.       }
  25.       console.log(cArr); // [1, 3, 5, 7, 9]
复制代码
 
官方是这样做的,更简洁一些
  1. // 可以通过如下代码模拟求交集
  2. const intersection = new Set([...mySet1].filter((x) => mySet2.has(x)));
  3. // 可以通过如下代码模拟求差集
  4. const difference = new Set([...mySet1].filter((x) => !mySet2.has(x)));
复制代码
 
此外,还有entries()、values()、keys()
  1. let collection = new Set([
  2.         { name: "zooey", age: 18 },
  3.         { name: "anan", age: 19 },
  4.         { name: "bobo", age: 20 },
  5.       ]);
  6.       //1.entries()
  7.       for (const [key, value] of collection.entries()) {
  8.         console.log(key, value); //key: {name: 'zooey', age: 18} value: {name: 'zooey', age: 18}
  9.       }
  10.       //2.keys()
  11.       for (const item of collection.keys()) {
  12.         console.log(item); // {name: 'zooey', age: 18}
  13.       }
  14.       //3.values()
  15.       for (const item of collection.values()) {
  16.         console.log(item); // {name: 'zooey', age: 18}
  17.       }
复制代码
 
 
来源:https://www.cnblogs.com/zry123/p/17983277
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具