1. Set
es6 提供了新的数据结构 Set(集合),它类似于数组(但不是数组,需要转化),但成员的值是唯一的(可以达到数组去重的效果),集合实现了iterator接口,所以可以使用 扩展运算符 和 for...of 进行遍历。
Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===
),主要的区别是向 Set 加入值时认为NaN等于自身,而精确相等运算符认为NaN不等于自身。
(== 用于比较、判断两者相等(只比较值),比较时可自动换数据类型;=== 用于(严格)比较、判断两者(严格)相等,不会进行自动转换,要求进行比较的操作值和数据类型必须一致,否则返回flase。)
比较算法SameValueZero,它与SameValue的区别主要在于0与-0是否相等。在SameValueZero中0与-0相等,在SameValue中0与-0不等,会返回false。
集合的属性和方法:
- size 返回集合的元素个数
- add 增加一个新元素,返回当前集合
- delete 删除元素,返回 Boolean 值
- has 检测集合中是否包含某个元素,返回 Boolean 值
- clear 清空操作,返回undefined
let s2 = new Set([1, 2, 3, 4, 5, 5, 6])
console.log(s2)
// 元素个数
console.log(s2.size) // 6
// 添加元素
s2.add(4) // 1 2 3 4 5 6
// 删除元素
s2.delete(5) // 1 2 3 4 6
// 检测
console.log(s2.has(4), s2.has(5)) // true false
// 清空
// s2.clear() // 空了
for( let s of s2) {
console.log(s) // 1 2 3 4 6
}
有关集合的实现以及结果展示:
// 集合的常见操作
let arr = [56, 34, 78, 23, 56, 90, 92, 17, 23]
let arr2 = [34, 78, 45, 23, 53, 71, 66, 88]
// 1. 数组去重
let result1 = [...new Set(arr)]
// 2. 交集
// 先去重 再通过 filter 和 Set的has方法 进行筛选
let result2 = [...new Set(arr)].filter( item => new Set(arr2).has(item) )
// 3. 并集 先合并,再去重,再转化为数组
let result3 = [...new Set([...arr, ...arr2])]
// 4. 差集
let result4_1 = [...new Set(arr)].filter( item => !(new Set(arr2).has(item)) )
let result4_2 = [...new Set(arr2)].filter( item => !(new Set(arr).has(item)) )
console.log(result1, result2, result3, result4_1, result4_2)
2. Map
es6 提供了Map数据结构,它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map也实现了iterator接口,所以可以使用 扩展运算符 和 for...of 进行遍历。
Map的属性和方法:
- size 返回Map的元素个数
- set 增加一个新元素,返回当前Map
- get 返回键名对象的键值
- has 检测Map中是否包含某个元素,返回 Boolean 值
- clear 清空操作,返回undefined
// Map
let m = new Map()
// 添加元素
m.set('name', '梅干菜包子') // 键是字符串 值为字符串
m.set('eat', function () {
conso.log('早晨吃梅干菜包子!')
}) // 键是字符串 值为function
let key = {
person: 'FOOD'
}
m.set(key, ['菌菇包子', '白菜豆腐包子', '粉丝牛肉包子']) // 键是对象 值为数组
console.log(m.size) // 3
// 获取
console.log(m.get('name')) // 梅干菜包子
console.log(m.get(key)) // ["菌菇包子", "白菜豆腐包子", "粉丝牛肉包子"]
// 删除
// m.delete(key)
// 清空
// m.clear()
// 遍历
for (let v of m) {
console.log(v) // 结果是数组形式; 下标 0 为key值 , 下标 1 为value值
}
下一篇 ... ...