<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
/**
* Set介绍:
* 个人觉得和Java的HashSet差不多,不存在重复值,没有顺序
* 操作方法:
* add :添加值add(value):添加某个值,返回 Set 结构本身(可以链式调用)。
* delete(value):删除某个值,删除成功返回 true,否则返回 false。
* has(value) :返回一个布尔值,表示该值是否为 Set 的成员。
* clear() :清除所有成员,没有返回值。
*
* 循环方法:
* keys() :返回键名的遍历器。
* values() :返回键值的遍历器。
* entries() :返回键值对的遍历器。
* forEach() :使用回调函数遍历每个成员。
*
* 注意点:
* 两个undefined在一起是相等的,所以不可重复
* -0和+0是相等的,不可重复
* NaN 与 NaN 是不恒等的,但是在 Set 中认为 NaN 与 NaN 相等,所有只能存在一个,不重复。
* 由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys 方法和 values 方法的行为完全一致。
* Array 和 Set 对比
*
* Array 的 indexOf 方法比 Set 的 has 方法效率低下
* Set 不含有重复值(可以利用这个特性实现对一个数组的去重)
* Set 通过 delete 方法删除某个值,而 Array 只能通过 splice。两者的使用方便程度前者更优
* Array 的很多新方法 map、filter、some、every 等是 Set 没有的(但是通过两者可以互相转换来使用)
*/
let set = new Set()
set.add({name: "晨晨", age: 66})
set.add({name: "晨晨", age: 66})
set.add(undefined)
set.add(undefined)
set.add(+0)
set.add(-0)
console.log(set)
// 应用场景1:去重
let different = new Set([1, 2, 1, 4])
console.log(different)
// 应用场景2:实现并集、交集、差集
let a = new Set([1, 3, 4, 7])
let b = new Set([1, 5, 2, 3])
let combineArr = new Set([...a, ...b]) // 并集
let connectArr = new Set([...a].filter(item => { // 交集
return [...b].indexOf(item) !== -1
}))
let decreaseArr = new Set([...a].filter(item => { // 差集
return [...b].indexOf(item) === -1
}))
</script>
</body>
</html>
JS的Set
最新推荐文章于 2023-09-08 08:46:07 发布