ES6 提供了一个新的数据结构 Set 用来存储任意类型的值,它类似于数组。

转换

 Array 转换成 Set

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

 Set 转换成 Array

let set = new Set([1, 2, 3])
let arr = [...set]  // [1, 2, 3]

区别

1.  唯一性

Array 是可以包含重复值的,

let arr = [1, 1, 2, 2]

而 Set 中的值则总是唯一的,不会有重复值存在,这也是 Set 跟数组之间最直观的区别。

new Set([1, 1, 2, 2])// 输出 Set(2) {1, 2}

利用这一特性可以快速去重

let arr = [1, 1, 2, 2]
let newArr = [...new Set(arr)]// newArr 为 [1, 2]

既然 Set 具有元素唯一性,那么就肯定会有一个判断的机制,这个机制其实就类似精确相等 ===,当然这里面有特例 NaN

2.   长度

arr.length 用来获取数组的长度,而在 Set 中就变成了 size 属性了

let set = new Set([1, 2, 3])
set.size // 3

3.  获取元素

数组可以直接通过索引的方式(arr[0])取值,但是 Set 是不能这样获取的。只能通过遍历取值

let sets = new Set([5, 8, 10])
for (let value of sets) {console.log(value)
}// 5
// 8
// 10

4.  添加元素

数组可以通过 push() 方法或者索引的方式添加值

let arr = [1, 2]
arr[2] = 3
arr.push(4)

而 Set 则是通过 add() 方法来实现

let set = new Set()
set.add(1)
set.add('hello')// Set(2) {1, "hello"}

而且 add 方法是返回 Set 对象本身,所以是可以链式调用的

set.add(2).add('hello')

5.  删除元素

数组中可以通过 splice 来删除某个元素,本质上是通过索引来删除元素

let arr = [4, 5, 6]
arr.splice(1, 1)// arr [4, 6]

Set 要删除某个元素更方便,用 delete() 来做

let set = new Set([4, 5, 6])
set.delete(5)// Set(2) {4, 6}

该方法返回一个布尔值,删除成功返回 true,如果删除一个不存在的元素则返回 false。

6.  清空

前面讲过清空数组的方式,最简单的直接

arr.length = 0

而 Set 有个专门用来清空的方法 clear()

let set = new Set([4, 5, 6])
set.clear()// Set(0) {}

7.  是否存在某个值

数组中要判断是否存在某个值,可以用 indexOf() 或 includes() 实现

arr.indexOf(1) > -1
arr.includes(1)

而 Set 则可以通过 has() 实现

let set = new Set([4, 5, 6])
set.has(1) // false

总结

数组和 Set 直观的区别是,数组可以包含重复元素,而 Set 的元素都是唯一的。综合 Set 操作元素的方法,更像是一个数组仓库,没有索引的概念,也就不能通过索引方便地取值了。实际开发中应该根据情况在二者之间选择合适的使用。

Set 和 Array相关推荐

  1. 老男孩上海校区Python面试题

    python面试题 第一章:python基础 数据类型: 1 字典: 1.1 现有字典 dict={'a':24,'g':52,'i':12,'k':33}请按字典中的 value 值进行排序? 1. ...

  2. php recordarray,Array 数组 - [ php中文手册 ] - 在线原生手册 - php中文网

    用户评论: [#1] florenxe [2015-10-07 18:53:45] //a nice little way to print leap years using array for ($ ...

  3. NumPy — 创建全零、全1、空、arange 数组,array 对象类型,astype 转换数据类型,数组和标量以及数组之间的运算,NumPy 数组共享内存

    NumPy 简介 一个用 python 实现的科学计算包.包括: 1.一个强大的 N 维数组对象 Array : 2.比较成熟的(广播)函数库: 3.用于整合 C/C++ 和 Fortran 代码的工 ...

  4. array.array python yhzf

    关于array: Python 本身没有数组这个说法, 有的就是list和tuple, list就具有其他语言中的数组特性. 至于list和tuple的区别,在于list可以在运行时修改内容和大小,t ...

  5. [JS]请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

    请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组. 刚开始复习js题还不太习惯 CSDN上看了一个帖子,说是牛客上的标答, ...

  6. hnswlib RuntimeError: Cannot return the results in a contigious 2D array. Probably ef or M is to sma

    1. 问题现象 index = hnswlib.Index(space = '100', dim = 512) index.init_index(max_elements = 100, ef_cons ...

  7. Array 数组去重 总结10方法(7)

    1,常规双循环去重(缺点:循环次数较多) Array.prototype.unique1 = function(){if(this === null){throw new TypeError('&qu ...

  8. ECMAScript——引用数据类型之array

    array 转载于:https://www.cnblogs.com/cataway/p/4967058.html

  9. leetcode:Search in Rotated Sorted Array

    题目要求: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...

  10. intval0.57100 php_php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习

    //比较值 '' NULL 0 false true FALSE TRUE //相等判断 //'' == NULL == 0 == false (相等) //array() = 0 == NULL = ...

最新文章

  1. 【Android 逆向】Android 进程简介 ( Android 应用启动流程 )
  2. 手写Spring-ioc 注入 jdk反射实现 绝对满足你的好奇心哦 解决怎么我写了一个注解就可以直接注入了?
  3. .NET Core使用gRPC打造服务间通信基础设施
  4. 存储基础:磁盘 IO 为什么总叫你对齐?
  5. Apache SolrCloud安装
  6. php实现最简单的MVC框架实例教程
  7. lazarus的动态方法和虚拟方法
  8. 0418 面向对象进阶 反射内置函数
  9. 关于SSM项目中配置文件的一些心得
  10. 在乌班图系统上安装yum
  11. 前端必知:微信小程序如何引入阿里图标
  12. Unti12. linux中的软件的管理
  13. C语言-条件与循环-学习笔记05
  14. AUTOMATE THE BORING STUFF WITH PYTHON读书笔记 - 第18章:SENDING EMAIL AND TEXT MESSAGES
  15. 典型相关分析(Canonical correlation analysis)(二):原始变量与典型变量之间的相关性 、典型相关系数的检验
  16. 为何要重建索引 index
  17. matlab读数据写入excel文件路径,MATLAB读取和写入Excel文件
  18. 结合论文理解gps与imu融合定位代码的细节
  19. 轨到轨(rail to rail)运算放大器电路设计
  20. 【C++Primer5】第一章的练习题及答案

热门文章

  1. 什么是Portlet
  2. python大括号用法_Python如何在 .format 中使用大括号
  3. 将一个四位数,反向输出
  4. Vue中验证码计时器的制作
  5. 笛卡尔的方法论:还原论
  6. C语言入门 - 迷信的吴医生和机智的护士
  7. 金融数据挖掘 第7章 第2节(3)英文文本分析处理
  8. 忠告职场新人:这10个“土规则”,早明白早受益,只意会不言传
  9. 主成分分析逆变换_通俗易懂的讲解奇异值分解(SVD)和主成分分析(PCA)
  10. html5超链接怎么变成灰色,html超链接颜色怎么改