石头理解的set

Set

set类似数组。其成员的值都是唯一的。

数组去重

const set = new Set([1,2,3,2,4,2,3,4])
console.log(set)
[...new Set(array)] // 返回无重复的数组

Set.add(value) 为set对象添加一个值
Set.size 返回set对象的长度
Set.delete(value) 删除set对象中的指定的值,并返回bool结果。
Set.has(value) 检查set对象中是否有指定的值
Set.clear() 删除指定set对象中的所有值

Set.keys() 返回一个以指定set对象的key组成的类数组对象。
Set.values() 返回一个以指定set对象的value组成的类数组对象。
Set.entries() 返回一个以key和value组成的数组组成的数组。
Set.forEach(fn(value, key) {}) 对set对象进行遍历操作。

set对象没有提供访问指定值的方法。要想访问指定值需要转为数组后再用数组的方法取指定值。

let set = new Set(['a', 1, 2, 2, 2, 1, 3])
let arr = [...set] // ['a', 1, 2, 3]
let index = arr.indexOf('a') // 0
console.log(arr[index]) // 'a'

因为set对象在存数据时无重复值。在取时较困难。所以石头一般使用set对象存放对象,然后检查是否有某个值,使用数组取数据。
set对象不能判断对象是否相等。所以不能去重对象。

并集

let union = new Set([...seta, ...setb])

交集

let intersect = new Set([...seta].filter(x => setb.has(x)))

差集

let difference = new Set([.seta].filter(x => !setb.has(x)))

WeakSet

  1. 只能存放对象。
  2. 对对象是弱引用。

WeakSet.add(obj) 为WeakSet对象指定添加的对象。
WeakSet.delete(obj) 返回是否删除指定的对象。
WeakSet.has(obj) 返回是否存在指定的对象。

现在set对象的操作方法、属性太少。(比如:无法准确地取出指定的值。)所以把他只做为一个仓库对待。操作还要在数组中操作。
它出现在数组对象没有这些功能的时期。应该是做为一个数组对象的补充存在。要项目中应当把set/array结合起来使用。
set对象用处少。weakset对象的用处更少。

2018/08/05 by stone

    原文作者:飞机
    原文地址: https://segmentfault.com/a/1190000015890258
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞