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
操作方法
- Map.prototype.set(key,value)
- Map.prototype.get(key)
- Map.prototype.has(key)
- Map.prototype.delete(key)
- 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 的所有成员。