Set 允许存储任意类型的不重复的数据
语法
new Set([iterable])
参数
iterable
如果传递一个可迭代对象,它的所有元素将不重复地被添加到新的 Set 中。如果不指定此参数或其值为null
,则新的 Set为空。
返回值
一个新的 Set 对象。
值相等
因为 Set 中的值总是唯一的,所以需要判断两个值是否相等。需要注意的是在 Set 里面 NaN 跟自身相等
与对象的区别
- | Set | Object |
---|---|---|
键类型 | 任意类型 | String/Symbol |
键覆盖 | 不会 | 会覆盖原型链上的 |
长度 | size属性获取 | 需要自己另外处理 |
顺序 | 不保证顺序 | 按照使用者添加的顺序 |
基本使用
let strSet = new Set('hellow word')
// 获取当前 Set 的长度
console.log(strSet.size)
// 结果输出 8 的原因是
// 因为字符串是一个可迭代对象,每次迭代都返回一个字符
// 又因为你 Set 里面的键具有唯一性
console.log(strSet)
// 在Set对象尾部添加一个元素。返回该Set对象。
console.log(strSet.add('!'))
// 移除Set对象内的所有元素。返回 undefined
// console.log(strSet.clear())
// 从 Set 中删除对应的键,
// 如果该键在删除之前存在于 Set 中,删除时则返回 true
// 如果该键在删除之前不存在于 Set 中,删除时则返回 false
console.log(strSet.delete('h'))
// 返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值的[value, value]数组。
// 为了使这个方法和Map对象保持相似, 每个值的键和值相等。
for (let [key, value] of strSet.entries()) {
console.log(key, value)
}
console.log(strSet.entries())
// 按照插入顺序,为Set对象中的每一个值调用一次callBackFn。如果提供了thisArg参数,回调中的this会是这个参数。
strSet.forEach((key, value) => {
console.log(key, value, this)
}, [12])
// 判断当前 Set 中,是否有该值的存在
console.log(strSet.has('h'))
// 返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。
for (let key of strSet.keys()) {
console.log(key)
}
console.log(strSet.keys())
典型用例 数组去重
const arrSet = new Set([1, 2, 1, 2, null, undefined, null, {a: 1}, undefined, {a: 1}, () => {}, () => {}])
console.log(arrSet)
// Set 转换 Array
const arr1 = [...arrSet]
console.log(arr1)
// Set 转换 Array
const arr2 = Array.from(arrSet)
console.log(arr2)
【笔记不易,如对您有帮助,请点赞,谢谢】