Set是JavaScript ES6中新增的资料结构,Set与阵列很类似,允许任何型态的值,跟阵列不同的是所有的值都是唯一的,不允许有重复的值,因此很适合用来去除重复的值。
let set = new Set()
let set2 = new Set([1, 3, 5, 7]) //{1, 3, 5, 7}
Set.add(value)
set.add(1) // {1}
这边要特别注意,因为set不允许有重复的值 ,所以重复add同个元素是不会有效果的
set.add(1) // {1}
set.add(1) // {1} 依然只有一个1
因为add会回传set的本身,所以可以使用chaining(链)的写法
set.add(1)
.add(2)
.add(3)
确认Set是否有该值,回传boolean值
set.has(1) // return true
删除该value,如果删除成功会回传true,失败则是false
set.delete(1) // return true
回传set的长度
let set = new Set()
set.add(1)
set.add(2)
set.add(3)
set.size; //3
清除set所有的内容,不会回传值
set.clear()
let set = new Set([1, 3, 5])
set.keys() // {1, 3, 5}
set.values() // {1, 3, 5}
set.entires() // {1 => 1, 3 => 3, 5 => 5}
set.forEach((value, key)=>{console.log('value:', value, 'key:', key)})
let array = [...set]
let set = new Set(array)
所以藉由Set值不重复的特性,如果想去除重复的值可以这麽做
let arr = [1, 2, 2, 3, 1]
let set = new Set(arr) // {1, 2, 2, 3, 1}
let result = [...set] // [1, 2, 3]
或者想找出两个阵列的联集
let arr1 = [1, 2, 5, 7, 9]
let arr2 = [1, 3, 4, 7, 8]
let same = new Set([...arr1, ...arr2])
// {1, 2, 5, 7, 9, 3, 4, 8}
WeakSet结构类似於Set,但跟Set不同的是,不接受基本资料型态的值,只接受Object,没有遍历和size的方法,只有add、has、delete这三个方法可以使用,另外,WeakSet里面的物件是Weakly Reference。
中文翻作弱引用,不会被垃圾回收机制计入参考,也就是说当其它物件不再参考该物件,就会被js的垃圾回收机制回收掉释放记忆体,即使物件还在WeakSet里面,可以必免memery leak(记忆体泄漏)的问题。
let weakSet = new WeakSet()
weakSet.add({})
weakSet.add([])
//{[], {}}
weakSet.add(5)
// TypeError: Invalid value used in weak set
参考资料: Set 和 Map 数据结构
<<: [Day4] Vite 出小蜜蜂~ Input Control 操作系统!
>>: 电子书阅读器上的浏览器 [Day06] 增加翻页按钮和分页数字资讯在工具列
Day 27 网路设置与远端 网路及远端登入可能有先东西在先前已经介绍过,这边再稍微做个简单的范例。...
前言 比较合并排序法与插入排序法,一旦输入n的规模足够大时,合并排序在最坏情况所需的时间Θ,而插入排...
"什麽叫你只会加密128位元?" --- 花了不少篇幅介绍两中区块加密方式,DE...
按照前一篇的程序安装完成并重开机後,即可开始正式使用 Proxmox VE 系统,请以浏览器连接至...
这篇会介绍的几种调用 redux state 的方式,都是工作上遇到的,算是长了知识,网路上也许会有...