09 Set和 Map数据结构

1.Set
2.Map

1.Set

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

1.基本用法
2.Set 实例的属性和方法

1.基本用法
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
console.log(s)  // Set { 2, 3, 5, 4 }
for (let i of s) {
  console.log(i)  // 2 3 5 4
}

Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
创建好的Set总是:Set {…}

去除数组重复成员

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

去除字符串重复字符

[...new Set('ababc')].join('')
//"abc"

Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是向 Set 加入值时认为NaN等于自身,而精确相等运算符认为NaN不等于自身。

两个对象总是不相等的。

let set = new Set();
let a = NaN;
let b = NaN;
set.add(a);
set.add(b);
set // Set {NaN}
set.add({}) // Set(2) {NaN, {…}}
set.add({}) // Set(3) {NaN, {…}, {…}}
2.Set 实例的属性和方法

两个属性

  • Set.prototype.contructor:构造函数,默认就是Set函数
  • Set.prototype.size: 返回Set实例的成员总数
set
// Set(3) {NaN, {…}, {…}}
set.constructor
// ƒ Set() { [native code] }
set.size
// 3

方法(操作数据方法、遍历方法)

操作方法:

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

const s = new Set()
s  // Set {}
s.add(1).add(2) 
s // Set{1,2}
s.has(1) //true
s.delete(1)  //true
s.clear() 
s  //  Set {}

遍历方法:

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

let s = new Set(['red', 'green', 'blue'])

for (let item of s.keys()) {
    console.log(item)  // red green blue
}

for (let item of s.values()) {
    console.log(item)  // red green blue
}

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

s.forEach((value,key) => {
    console.log(key + ':' + value) // red:red green:green  blue:blue
})

2.Map

  • ES6 提供了 Map 数据结构。
  • 它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
  • 而对象的键只能是字符串,有很大限制

1.基本用法
2.Map 实例的属性和方法

1.基本用法
const m = new Map();
const o = {p: 'Hello World'};
m.set(o,'content')
console.log(m)  // Map { { p: 'Hello World' } => 'content' }
2.Map 实例的属性和方法

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

console.log(m.size)  // 1

操作方法

  1. Map.prototype.set(key,value)
  2. Map.prototype.get(key)
  3. Map.prototype.has(key)
  4. Map.prototype.delete(key)
  5. Map.prototype.clear()
m.set(undefined, 'abc')
console.log(m)  // Map { { p: 'Hello World' } => 'content', undefined => 'abc' }

console.log(m.get(undefined))  // abc

console.log(m.has(undefined))  // true

console.log(m.delete(undefined))  // true
console.log(m)        //   Map { { p: 'Hello World' } => 'content', undefined => 'abc' }

m.clear()
console.log(m)  // Map {}

遍历方法
Map.prototype.keys():返回键名的遍历器。
Map.prototype.values():返回键值的遍历器。
Map.prototype.entries():返回所有成员的遍历器。
Map.prototype.forEach():遍历 Map 的所有成员。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值