Set 和 Array
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相关推荐
- 老男孩上海校区Python面试题
python面试题 第一章:python基础 数据类型: 1 字典: 1.1 现有字典 dict={'a':24,'g':52,'i':12,'k':33}请按字典中的 value 值进行排序? 1. ...
- php recordarray,Array 数组 - [ php中文手册 ] - 在线原生手册 - php中文网
用户评论: [#1] florenxe [2015-10-07 18:53:45] //a nice little way to print leap years using array for ($ ...
- NumPy — 创建全零、全1、空、arange 数组,array 对象类型,astype 转换数据类型,数组和标量以及数组之间的运算,NumPy 数组共享内存
NumPy 简介 一个用 python 实现的科学计算包.包括: 1.一个强大的 N 维数组对象 Array : 2.比较成熟的(广播)函数库: 3.用于整合 C/C++ 和 Fortran 代码的工 ...
- array.array python yhzf
关于array: Python 本身没有数组这个说法, 有的就是list和tuple, list就具有其他语言中的数组特性. 至于list和tuple的区别,在于list可以在运行时修改内容和大小,t ...
- [JS]请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组. 刚开始复习js题还不太习惯 CSDN上看了一个帖子,说是牛客上的标答, ...
- 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 ...
- Array 数组去重 总结10方法(7)
1,常规双循环去重(缺点:循环次数较多) Array.prototype.unique1 = function(){if(this === null){throw new TypeError('&qu ...
- ECMAScript——引用数据类型之array
array 转载于:https://www.cnblogs.com/cataway/p/4967058.html
- 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 ...
- intval0.57100 php_php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
//比较值 '' NULL 0 false true FALSE TRUE //相等判断 //'' == NULL == 0 == false (相等) //array() = 0 == NULL = ...
最新文章
- 【Android 逆向】Android 进程简介 ( Android 应用启动流程 )
- 手写Spring-ioc 注入 jdk反射实现 绝对满足你的好奇心哦 解决怎么我写了一个注解就可以直接注入了?
- .NET Core使用gRPC打造服务间通信基础设施
- 存储基础:磁盘 IO 为什么总叫你对齐?
- Apache SolrCloud安装
- php实现最简单的MVC框架实例教程
- lazarus的动态方法和虚拟方法
- 0418 面向对象进阶 反射内置函数
- 关于SSM项目中配置文件的一些心得
- 在乌班图系统上安装yum
- 前端必知:微信小程序如何引入阿里图标
- Unti12. linux中的软件的管理
- C语言-条件与循环-学习笔记05
- AUTOMATE THE BORING STUFF WITH PYTHON读书笔记 - 第18章:SENDING EMAIL AND TEXT MESSAGES
- 典型相关分析(Canonical correlation analysis)(二):原始变量与典型变量之间的相关性 、典型相关系数的检验
- 为何要重建索引 index
- matlab读数据写入excel文件路径,MATLAB读取和写入Excel文件
- 结合论文理解gps与imu融合定位代码的细节
- 轨到轨(rail to rail)运算放大器电路设计
- 【C++Primer5】第一章的练习题及答案