大神地址:来自阮一峰大神的ES6入门书籍javascript
ES6提供了数据结构Set。相似于数组,可是没有重复值。java
const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for(let i of s ) { console.log(i); //2 3 5 4 }
var set = new Set([1, 2, 3, 4, 4]); [...set]; // [1, 2, 3, 4]
可用于数组去重
[...new Set(array)]
es6
Array.from()
方法能够将Set结构转换为数组Array.from(new Set(array))
segmentfault
let set = new Set(); let a = NaN; let b = NaN; set.add(a); set.add(b); set; //{NaN} 只能加入一个,说明Set内部两个NaN是相等的
属性:数组
Set.prototype.constructor
:构造函数,默认就是Set函数Set.prototype.size
:返回实例的成员总数操做方法(方法的具体实现见:我对JS集合的简单学习):数据结构
add(value)
:添加一个值,返回Set结构自己delete(value)
:删除某个值,返回布尔值has(value)
:返回布尔值,表示是不是成员clear()
:清除全部成员,无返回值s.add(1).add(2).add(2); //链式写法 s.size(); //2 s.has(3); //false s.delete(2); s.has(2); //false
遍历方法函数
keys()
:返回键名的遍历器(什么是遍历器?Iterator)values()
:返回键值的遍历器entries()
:返回键值对的遍历器forEach()
:使用回调函数遍历每一个成员这里要注意Set的键名和键值是同一个值,因此key()和values()行为是一致的。学习
let set = new Set(['red', 'green', 'no']); for(let item of set.keys()) { console.log(item); //red green no } for(let item of set.values()) { console.log(item); //red green no } for(let item of set.entries()) { console.log(item); //['red': 'red'] ['green': 'green'] ['no': 'no'] } //对每一个成员执行某种操做,参数依次为键值、键名、集合自己 new Set([1, 2, 3]).forEach((value, key) => console.log(value * 2)); //2 4 6
let a = new Set([1, 2, 3]); let b = new Set([4, 3, 2]); //并集 let union = new Set([...a, ...b]); //{1, 2, 3, 4} //交集 let intersect = new Set([...a].filter(x => b.has(x))); //{2, 3} //差集 let difference = new Set([...a].filter(x => !b.has(x))); //{1}
号外:扩展运算符(...)内部使用for...of循环,因此应该知道for of是干吗的吧prototype
数组的map()
和filter()
可用于Setcode
let set = new Set([1, 2, 3]); set = new Set([...set].map(x => x * 2)); //set: {2, 4, 6} let set = new Set([1, 2, 3, 4, 5]); set = new Set([...set].filter(x => (x % 2) == 0)); //set {2, 4}