Set对象
在javaScript中存在两类聚合数据: 数组和对象。 ES6又新增两类聚合数据:Set对象和Map对象 Set对象,类似数组,但却是去重后的有序聚合数据。成员值都是唯一的(数据类型不同)
// let s1 = new Set([1, 2, 3, 2, 1, '2', NaN, +'a', 0, 0/-1]);
// console.log(s1)
// // 转化数组
// console.log([...s1])
// console.log(Array.from(s1));
Set是构造函数,参数是数组,类数组(或者实现了迭代器接口的数据) 我们可以用...语法对set对象转成数组。
set
相关方法简表:
方法 | 说明
:-:|--
Set.prototype.constructor
| 构造函数,默认就是 Set
函数。Set.prototype.size
| 返回 Set
实例的成员总数。
add (value)
| 添加某个值,返回 Set
结构本身。
delete(value )
| 删除某个值,返回一个布尔值,表示删除是否成功。
has (value)
| 返回一个布尔值,表示参数是否为 Set
的成员。
clear()
| 清除所有成员,没有返回值。
keys ()
| 返回键名的遍历器。
values ()
| 返回键值的遍历器。
entries ()
| 返回键值对的遍历器。
forEach()
| 通过回调函数遍历每个成员。
注:由于
Set
对象没有键名只有键值,因此keys
与values
方法的返回值是一样的。set
基本使用
// 创建set对象
let s1 = new Set();
//添加成员
console.log(s1.add(1))// Set(1){1} //返回的是set对象
//可以使用链式调用
s1.add(1).add(2).add(3).add(2).add(1)
console.log(s1)//{1,2,3}
console.log(s1.size)//3
//判断2是否存在
console.log(s1.has(2))//true
//删除成员
console.log(s1.delete(2))//true
console.log(s1.delete(2))//false 2不存在 所以删除失败
//清空数据
console.log(s1.clear())//undefined
console.log(s1)//{}
set
迭代器方法
// ======= set迭代器方法
let s1 = new Set(["blue","red","green"])
//获取键名
console.log(s1.keys())//SetIterator {"blue", "red", "green"}
//获取键值
console.log(s1.values())//SetIterator {"blue", "red", "green"}
//键值对
console.log(s1.entries())//SetIterator {"blue" => "blue", "red" => "red", "green" => "green"}
// foreach
s1.forEach((...args)=>{
console.log(args,this)
//(3) ["blue", "blue", Set(3)] Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
//(3) ["red", "red", Set(3)] Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
//(3) ["green", "green", Set(3)] Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
},{"num":100})// 添加对象没有作用
set
数组去重
//数组去重
let s1 = new Set([1,1,2,2,3,4,4,4,45,6,7,8,89,0,0])
//[1, 2, 3, 4, 45, 6, 7, 8, 89, 0]
console.log([...s1])
// 获取类数组对象
let divs = document.getElementsByTagName("div")
let s2 = new Set(divs);
console.log(s2) //Set(3) {div, div, div}
//类数组去重
function demo(){
console.log(new Set(arguments))//[1,2,4,5]
console.log(Array.from(new Set(arguments)))
}
demo(1,2,2,2,4,5,5)
Set
交集 并集 差集
//数组的交集 并集 差集
let a = [1,2,3]
let b = [2,3,4]
//并集
let s1 = new Set([...a,...b])
// console.log([...s1])//[1,2,3,4]
//交集 filter 方法返回值是数组 返回值传递给 new Set函数
let s2 = new Set(a.filter(item=>b.indexOf(item)>=0))
//差集
let s3 = new Set(a.filter(item=>b.indexOf(item)===-1))
console.log(Array.from(s1),Array.from(s2),Array.from(s3)) // [1, 2, 3, 4] (2) [2, 3] [1]
Set
对象映射
//======set对象 交集 并集 差集
let s1 = new Set([1,2,3,4])
let s2 = new Set([4,3,5,7])
//并集
let s = new Set([...s1,...s2])
// 交集
let s3 = new Set(Array.from(s1).filter(item =>s2.has(item)))
//差集
let s4 = new Set(Array.from(s1).filter(item =>!s2.has(item)))
console.log(s,s3,s4)//[1,2,3,4,5,7]
Set
对象映射
// ==========Set 对象映射
let s1 = new Set([1,2,3])
console.log(new Set(Array.from(s1).map(item=>item ** 3)))
console.log(new Set([...s1].map(item=> item ** 3)))
来源:oschina
链接:https://my.oschina.net/u/4162046/blog/3216331