ES6 Set和Map数据结构

2019-03-10  本文已影响0人  澹台琉璃

Set

基本用法

set类似于数组,但是成员的值都是唯一的,没有重复的值

    let set = new Set()
    const arr = [1,2,3,1,2,3]
    arr.forEach(n => {
      set.add(n)
    })
    for(let n of set) {
      console.log(n)
    }
    // 1 2 3

上面的代码用add()方法向set中添加数据,结果表明没有重复的值
Set的构造函数可以接受一个数组作为参数
使用Set对数组去重

const arr = [1,2,3,1,2,3]
const set = new Set(arr)
console.log([...set]) // [1 2 3]

向set中添加数据时不会发生类转换,5和'5'是两个不同的值,并且add()方法会返回当前Set对象,可以使用链式写法

const set = new Set()
      .add(5)
      .add('5')
    console.log([...set]) // [5, '5']

Set 实例的属性和方法

Set 结构的实例有以下属性。
Set.prototype.constructor:构造函数,默认就是Set函数。
Set.prototype.size:返回Set实例的成员总数。

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

const set = new Set()
set.add(1).add(2).add(3) // [1,2,3]
set.delete(1) // true
set.has(1) // false
set.has(2) // true
set.clear() // []

Set 遍历方法:

Set 结构的实例有四个遍历方法,可以用于遍历成员
Set的遍历顺序就是插入顺序
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():使用回调函数遍历每个成员

const set = new Set()
set.add('red').add('pink').add('green')
for (let item of set.keys()) {
  console.log(item)
}
// red
// pink
// green

for (let item of set.values()) {
  console.log(item)
}
// red
// pink
// green

for (let item of set.entries()) {
  console.log(item)
}
// ["red", "red"]
// ["pink", "pink"]
// ["green", "green"]

Set的实例默认可遍历,直接用for...of循环遍历Set

const set = new Set()
set.add('red').add('pink').add('green')

for (let item of set) {
  console.log(item)
}
// red
// pink
// green

Map

Map数据结构类似于对象,都是键-值对的集合,但是Map的'键'的范围不限于字符串,而是包括各种类型的数据

const o = {
  name: 'tom',
  age: 12
}
let map = new Map()
map.set(o, 'content')
map.get(o) // content

Map的构造函数接受任何具有 Iterator 接口、且每个成员都是一个双元素的数组的数据结构作为参数

let map = new Map([
  ['name', 'tom'],
  ['age', 12]
])
map.get('name') // tom
map.get('age') // 12

Map的键是跟内存地址绑定的,只要内存地址不一样就视为不同的键

let map = new Map()
map.set([1], 'a')
map.get([1]) // undefined

上面的代码中两个[1]在内存中的地址不同,因此对Map来说并不是同一个键

Map的实例属性和方法

size属性:返回Map结构成员总数

let map = new Map()
map.set('name', 'tom')
map.set('age', 12)
map.size // 2

set(key, value):设置key对应的值为value,如果key已存在则更新key的值,返回当前Map对象,可采用链式写法

let map = new Map()
  .set(1, 'a')
  .set(2, 'b')
  .set(3, 'c');

get(key): 返回key对应的value,如果key不存在则返回undefined
has(key):判断某个键是否在Map对象中,返回布尔值
delete(key):删除某个键,成功返回true,失败返回false
clear():清除所有成员,没有返回值

Map遍历方法

Map 的遍历顺序就是插入顺序
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回所有成员的遍历器。
forEach():遍历 Map 的所有成员。

let map = new Map()
map.set('name', 'tom')
map.set('age', 12)

for (let item of map.keys()) {
  console.log(item)
}
// "name"
// "age"

for (let item of map.values()) {
  console.log(item)
}
// "tom"
// 12

for (let [key, vaue] of map.entries()) {
  console.log(key, vaue)
}
// "name" "tom"
// "age" 12

map.forEach((value, key) => {
  console.log(value, key)
})
// "tom" "name"
// 12 "age"
上一篇下一篇

猜你喜欢

热点阅读