ES6-两分钟学会set集合高级用法

196 阅读3分钟

前言

  Set集合是ES6提供的一种新的数据结构,它类似于数组,并且存储的值总是唯一的。Set 对象本身就是一个构造函数,允许你存储任何类型的唯一值,无论是原始值或者是对象引用。Set是由哈希表(Hash Table)实现,并可按添加时候的顺序枚举,速度远快于ES5的object。

一、Set创建方式

注意: Set不允许通过字面量创建,只能通过构造函数的方式创建。

  // 创建 set 对象
  const set = new Set();
  // 创建有初始值的 set 对象
  const set = new Set(["稀土","掘金"]);

二、Set的特殊值

  Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:

+0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;

undefined 与 undefined 是恒等的,所以不重复;

NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复。

三、Set对象的API

1. add( value )

作用: 向 Set 添加新元素。

  const set = new Set(["稀土","掘金"]);
  set.add("VeryCool")
  console.log(set); // 输出:{'稀土', '掘金', 'VeryCool'}

2. clear()

作用: 删除 Set 中所有元素,返回undefined

  const set = new Set(["稀土","掘金"]);
  set.clear();
  console.log(set); // 输出:{size: 0}

3. delete( value )

作用: 删除 Set 中指定的元素。

  const set = new Set(["稀土","掘金"]);
  set.delete("稀土");
  console.log(set); // 输出:{'掘金'}

4. entries()

作用: 返回一个新集合迭代器的对象。该对象包含每个元素的 [value, value] 数组。它维护一个插入顺序。

  const set = new Set(["稀土","掘金"]);
  const newSet = set.entries();
  console.log(newSet); // 输出:{'稀土' => '稀土', '掘金' => '掘金'}

5. has( value )

作用: 查找set集合是否有某个元素,存在返回true,不存在返回false

  const set = new Set(["稀土","掘金"]);
  const newSet = set.has("掘金");
  console.log(newSet); // 输出:true

6. forEach()

作用: 对Set对象中的每个值执行一次回调函数。

  • value:可选,Set对象中元素的值。
  • key:可选由于Set对象没有键,所以key的值和value的值相同。
  • setObj:可选,Set对象本身。
  const set = new Set(["稀土"]);
  set.forEach(function (value, key, setObj) {
    console.log(value);   // 输出:稀土
    console.log(key);     // 输出:稀土
    console.log(setObj);  // 输出:{'稀土'}
  });

7. keys()、value()

作用: keys()返回Set实例对象的键名遍历器。但由于Set没有键名,只有键值,故keys()方法和values()方法的返回值一样,都是键值。

  const set = new Set(["稀土","掘金"]);
  const newSet =set.keys();
  console.log(newSet); // 输出:{'稀土', '掘金'}

8. size

作用: 返回set集合的元素个数。

  const set = new Set(["稀土","掘金"]);
  const newSet =set.size;
  console.log(newSet); // 输出:2

四、Set对象的作用

1. 数组去重

作用: set集合会自动对数组中重复元素进行去重。

  const set = new Set([1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6]);
  console.log(set);  // 输出:{1, 2, 3, 4, 5, 6}

2. 字符串去重

  const set = new Set("稀土掘金稀土掘金");
  console.log(set);  // 输出:{'稀', '土', '掘', '金'}

3. 求交集

  const a = new Set([1, 2, 3]);
  const b = new Set([3, 4, 5]);
  const intersect = new Set([...a].filter((x) => b.has(x))); // {2, 3}
  console.log(intersect); // 输出:3

4 求并集

  const a = new Set([1, 2, 3]);
  const b = new Set([3, 4, 5]);
  const union = new Set([...a, ...b]);
  console.log(union); // 输出:{1, 2, 3, 4, 5}

5.求差集

  const a = new Set([1, 2, 3]);
  const b = new Set([4, 3, 2]);
  const difference = new Set([...a].filter((x) => !b.has(x)));
  console.log(difference); // 输出:{1}

结尾.jpg