JavaScript下一版本标准ES6的Set集合使用详解

JavaScript下一版本标准ES6的Set集合使用详解

什么是Set集合

Set是一种新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。Set有以下特点:

  • Set内部使用Hash表存储元素,导致元素的顺序不是按照插入顺序保存,但是一组具有相同内容的对象在Set内只有一份。
  • Set添加元素时,不会进行类型转换,比如1和"1"是两个不同的值。因此,Set内部判断两个值是否相等,使用的是“Same-value-zero equality”算法,类似于Javascript使用的“===”来比较,区别是Set将NaN视为相等。
  • Set的成员可以是任意类型,包括对象的引用,但是添加到Set中的对象必须是唯一的。

Set集合的基本使用

创建Set对象

我们可以使用Set类来创建Set对象,创建一个空的Set对象可以用空的参数列表:

const set = new Set();

也可以使用数组作为Set对象的初始化值,数组中的重复元素会被当成一个元素处理:

const arr = [1,2,2,3,3,3];
const set = new Set(arr);
// set: Set(3) { 1, 2, 3 }

Set对象的基本操作

使用add方法向Set对象中添加元素,delete方法删除元素,clear方法清空Set对象;使用size属性获取Set集合中元素的数量。

const set = new Set();
set.add(1);
set.add(2);
set.add(3);
console.log(set);//Set(3) {1, 2, 3}
set.delete(2); 
console.log(set);//Set(2) {1, 3}
set.clear();
console.log(set);//Set(0) {}
console.log(set.size);//0

Set对象的遍历

  • values()方法返回一个包含Set集合内所有值的迭代器
  • keys()方法返回一个包含Set集合内所有值的迭代器(与values()方法相同)
  • entries()方法返回一个包含Set集合内所有值的迭代器(与values()方法相同)
const set = new Set(['a', 'b', 'c', 'd']);
for (const val of set.values()) {
    console.log(val);
}
// 输出:a b c d

Set集合的高级用法

交集、并集和差集

  • union:获取两个集合的并集
  • intersection:获取两个集合的交集
  • difference:获取两个集合的差集
const a = new Set([1, 2, 3, 4]);
const b = new Set([3, 4, 5, 6]);

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

// intersection
const intersection = new Set([...a].filter(x => b.has(x)));
console.log(intersection); // Set(2) { 3, 4 }

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

Set集合和数组之间的转换

  • Set转成Array
const set = new Set([1, 2, 3]);
const arr = Array.from(set);
console.log(arr); // [1, 2, 3]
  • Array转成Set
const arr = [1, 2, 3, 3, 2, 1];
const set = new Set(arr);
console.log(set); // Set(3) {1, 2, 3}

示例说明

示例一:使用Set获取数组中的不重复元素

const arr = [1, 2, 2, 3, 3, 4, 5, 5];
const unique = [...new Set(arr)];
console.log(unique); // [1, 2, 3, 4, 5]

示例二:判断两个数组是否完全相同

const a = [1, 2, 3];
const b = [1, 2, 3];
const c = [1, 2, 4];

const isEqual = (arr1, arr2) => {
  const s1 = new Set(arr1);
  const s2 = new Set(arr2);
  if (s1.size !== s2.size) {
    return false;
  }
  for (let i of s1) {
    if (!s2.has(i)) {
      return false;
    }
  }
  return true;
}

console.log(isEqual(a, b)); // true
console.log(isEqual(a, c)); // false

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript下一版本标准ES6的Set集合使用详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • JS中如何将base64转换成file

    将base64转换成file的过程主要可分为以下两步: 将base64字符串转换成二进制数据 将二进制数据转换成file对象 下面是具体的代码实现。 将base64字符串转换成二进制数据 我们可以使用atob函数将base64字符串转换成二进制数据。在JS中,base64字符串常常会作为”data:image/png;base64,”、”data:image…

    JavaScript 2023年5月27日
    00
  • 统一接口:为FireFox添加IE的方法和属性的js代码

    为Firefox浏览器添加IE的方法和属性的js代码,需要使用jQuery以及XMLHttpRequest对象来实现。 以下是添加IE方法的代码: // 为IE的String对象添加contains方法 if (!String.prototype.contains) { String.prototype.contains = function(str, st…

    JavaScript 2023年6月10日
    00
  • JavaScript 错误处理与调试经验总结

    以下是详细讲解“JavaScript 错误处理与调试经验总结”的完整攻略。 问题简述 JavaScript 是一门动态解释型语言,它的开发过程中难免会出现各种各样的问题,如语法错误、逻辑错误、运行时错误等。这就需要我们在开发过程中掌握一些错误处理和调试技巧,以提高代码的质量和开发效率。 错误处理和调试技巧 1. 使用 try-catch-finally 块 …

    JavaScript 2023年5月27日
    00
  • 日常收集JS邮箱验证正则表达式

    当我们在开发 web 应用时,经常会有需要验证邮箱地址的情况,其中验证方法之一就是使用正则表达式。下面,我们来讲解一个较为完整的日常收集JS邮箱验证正则表达式的攻略。 确定目标 在进行任何一项技术攻略时,第一步都是要明确目标。对于本文所讲的“日常收集JS邮箱验证正则表达式”的攻略,其目标是收集常用的 JS 邮箱验证正则表达式并进行整合。 收集来源 在确定了目…

    JavaScript 2023年6月10日
    00
  • VuePress使用Algolia实现全文搜索

    下面我将为你详细讲解“VuePress使用Algolia实现全文搜索”的完整攻略。 什么是VuePress? VuePress是一款基于Vue.js的静态网站生成器,它基于Markdown文件进行内容编写,具有文档编写、主题定制、SEO优化、全文搜索等功能,为个人博客或技术文档提供了一种快速搭建的方案。 什么是Algolia? Algolia是一款强大的全文…

    JavaScript 2023年6月11日
    00
  • Angular服务Request异步请求的实例讲解

    下面是关于“Angular服务Request异步请求的实例讲解”的完整攻略。 标题:Angular服务Request异步请求的实例讲解 什么是Angular服务Request? Angular服务Request是Angular框架内置的一个服务,主要用于发送异步HTTP请求。Request服务是通过Angular注入系统使用的,因此我们只需要在组件或其他服务…

    JavaScript 2023年6月11日
    00
  • JS获取地址栏参数的两种方法(简单实用)

    JS获取地址栏参数是前端开发中经常用到的功能,一般用于获取URL中的参数信息来完成一些操作。下面我将详细讲解 JS获取地址栏参数的两种方法。 方法一:使用URLSearchParams对象 URLSearchParams对象是ES6中新增的一个API,用于获取URL中的参数信息。使用该对象获取地址栏参数的代码示例如下: const urlParams = n…

    JavaScript 2023年6月10日
    00
  • js判断文件格式及大小的简单实例(必看)

    正如该文章标题所示,该篇文章提供的是一个关于使用JavaScript来判断文件格式及大小的简单实例。文章主要分为两个部分:判断文件格式和判断文件大小。 判断文件格式 如果想要判断一个文件的格式,一般可以通过文件的后缀名来进行判断。比如说,通常”jpeg”后缀的文件都是jpg格式,”png”后缀的文件都是png格式,等等。 下面我们来看一下代码示例: func…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部