JavaScript Set 的用法与理解
Set的使用场景
Set和Array的区别是Set里的每一个元素都是唯一的,比如你有一个Array里面有4个元素[1, 2, 3, 1,4],如果你把它转换成Set,就变成[1, 2, 3,4]了。所以我们可以利用Set的这个特性做整数数组的去重。但要注意的是,如果你的数组是[{name: 1}, {name: 1}]这样的包含Object的数组,那么你把它转换为Set时并不能去重,因为虽然这两个对象看起来一样,但在Set看来,这个数组里的两个对象是两个完全不同的值,所以并不符合去重的要求。
var arr = [1,1,2,2,3,3] var set = Array.from(new Set(arr)) //[1,2,3]
//let set = [...new Set(arr)]
let arr = [1,1,2,2,3,3] let set = [...new Set(arr)] let item = 3 let itemIdx = 2
查找快的原因:时间复杂度
set.has(item) //O(1) arr.indexOf(item) // O(n) arr.includes(item) // O(n)
删除元素不需要知道索引
set.delete(item) arr.splice(itemIdx, 1)
插入元素
set.add(item) arr.push(item) arr.unshift(item)
去重
let arr = [1,1,2,2,3,3] let unq = [...new Set(arr)] // [1,2,3]
方法/属性 | 功能介绍 |
---|---|
size | 获取当前Set对象的长度 |
add(value) | 向当前Set对象中添加一个值,返回的是Set对象,所以支持链式写法 |
delete(value) | 删除当前Set对象中的一个值,返回一个布尔值,表示是否删除成功 |
has(value) | 检测这个value是否是当前Set对象的一个元素,通过返回的布尔值表示 |
clear() | 清除当前Set对象所有元素,没有返回值 |
方法/属性 | 功能介绍 |
---|---|
keys() | 返回该Set对象键名的遍历器,等同values() |
values() | 返回该Set对象键值的遍历器,等同keys() |
entries() | 返回该Set对象键值对的遍历器(目前感觉没什么用) |
forEach() | 使用回调函数遍历该Set对象的每个元素 |
for(let i of set.keys()){ console.log(i); } // 0, 1, 2 set.forEach((value, key, _set) => { console.log(value, key, _set) })