/ ECMAScript6

ECMAScript 6 之 SET & MAP

标签: ECMAScript 6 javaScript

Set

ES6 提供了新的数据结构 Set 。它类似于数组,但是成员的值都是唯一的,没有重复的值。

一些 Set 的使用方式

// 单个添加
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

// 将数组转换为 set 对象
const set = new Set([1, 2, 3, 4, 4])
[...set]
// [1, 2, 3, 4]

Set 下的操作方法:

  • add(value):添加某个值,返回 Set 结构本身。
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value):返回一个布尔值,表示该值是否为 Set 的成员。
  • clear():清除所有成员,没有返回值。
  • size():返回 Set 实例的成员总数。

Set 下的遍历方法:

  • keys():返回键名的遍历器
  • values():返回键值的遍历器
  • entries():返回键值对的遍历器
  • forEach():使用回调函数遍历每个成员

由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys 方法和 values 方法的行为完全一致。

Map

Map 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,MapObject 更合适。

一些 Map 的使用方式

const m = new Map()
const o = 'keyName'

m.set(o, 'content')
m.get(o) // "content"

m.has(o)    // true
m.delete(o) // true
m.has(o)    // false

const map = new Map([
    ['name', '张三'],
    ['title', 'Author']
])

map.size          // 2
map.has('name')   // true
map.get('name')   // "张三"
map.has('title')  // true
map.get('title')  // "Author"

Map 下的操作方法:

  • size : 返回 Map 结构成员数
  • set(key, value) : 为 Map 设置键名为 key 键值为 value
  • get(key) : 读取键名为 key 的键值
  • has(key) : 判断某个键名是否在 Map 中存在,返回 Boolean
  • delete(key) : 删除某个键
  • clear() : 清空整个 Map

Map 的结构和 Set 类似,遍历方法和 set 一致。唯一不同的是:map 存的键值对,也拥有正确的 keys 方法和 values 方法。

注: 上面的例子大多数来自《ECMAScript 6入门》这本书。