操作系统:Linux version 4.4.131.D001.64.190906 (YHKYLIN-OS@Kylin)
WPS版本:WPS Office 2019 WPS表格(11.8.2.10533)
Set,集合对象,在VBA中也有一个集合对象,叫做Collection。
function testSet1() {
var s = new Set([1,2,2,3,4])
s.add(2)
Debug.Print("size: "+s.size)
}
输出:size: 4
Set是不能保存重复值的,所以无法添加重复值到Set中,利用这个特性就可以做去重功能。
vba中的Collection也是无法添加重复值,但是一旦重复添加会报错,Set允许重复去添加,但不会保存重复值,这个特性和vba中使用的字典更像。
但是Set是不能保存item数据的,只能保存key的数据。
Set是JS一种对象,同样有许多的属性和方法,这些属性和方法都是为了方便使用:
判断是否存在某个key:s.has
通过Set创建数组:
function testSet2() {
var s = new Set([1,2,2,3,4])
var arr = new Array()
arr = Array.from(s)
for (x in arr) {
Debug.Print(x + " " + arr[x])
}
}
筛选filter:
function testSet3() {
var s = new Set([1,2,2,3,4])
var s1 = new Set([...s].filter(
x=>(x%2==0)
))
for (x of s1) {
Debug.Print("for of " + x )
}
}
forEach遍历:
function testSet4() {
var s = new Set([1,2,2,3,4])
s.forEach(
k => Debug.Print("forEach " + k)
)
}
因为forEach可以传递function,可以结合delete来筛选Set:
function testSet5() {
var s = new Set([1,2,2,3,4])
var f = function(k){
if (k%2==0) {
s.delete(k)
}
}
s.forEach(
k => (f(k))
)
for (x of s) {
Debug.Print("for of " + x )
}
}
总的来说,js的各种对象内置了许多方便的属性和方法,使用起来也非常的灵活方便。