Set
什么是Set
- Set是一种叫集合的数据结构
- 本质是个构造函数 , 允许储存任何类型的值 , 并且成员的值都是唯一的 , 即没有重复的
- 类似数组 , 但没有下标 , 没有length , 不是按照下标储存的 , 所以不能依照下标循环 , 但是有序
- .插入速度和删除速度非常快,遍历查找速度也非常快,但是略低于键值对类型。
- 应用就是去重 , 用
Array.from
方法数组去重
var arr=[1,3,5,7,2,4,3,5,1,2,6,5,7,8,9,1,2,4,3,5,7,9];
arr=Array.from(new Set(arr));
console.log(arr);
Set方法
- Set的属性
size
, 代替数组里的length - 支持
add
(添加) ,has
(查找) ,delete
(删除) ,clear
(清除所有成员)
let s= new Set([1])
s.add(2)
s.size // 2
s.has(1) // true
s.delete(2);
- 添加的时候不会数据类型转换 , 比如5和"5" 是不一样的 , Set 内部判断两个值是否不同,使用的算法叫做
“Same-value-zero equality”
类似于"==="
, 并且所有NaN是一样的 , 虽然NaN区别于自身
遍历成员
- Set 结构的实例与数组一样,也拥有
forEach
方法,用于对每个成员执行某种操作,没有返回值。这里需要注意,Set 结构的键名就是键值(两者是同一个值),因此第一个参数与第二个参数的值永远都是一样的
let s = new Set()
s.add(1)
s.add(3)
s.add(5)
s.forEach((value, key) => console.log(key + ' : ' + value)); // 1:1, 3:3, 5:5
- 同时
keys
方法可以遍历集合的键名 ,values
方法可以遍历集合的键值
let set = new Set();
set.add(1);
set.add(3);
set.add(2);
console.log(set.keys());
console.log(set.values());
Map
什么是Map
- 是一种叫字典的数据结构
- 类似对象 , 传统的对象键只能是字符串 ,本质是 "键–值"对的结合 , Map突破了这一限制 , Map的键不仅可以是字符串 , 提供
"值--值"
对应 - Map里面的成员也是唯一的 , 不储存重复的值
- Map 的键要两个值严格相等(
===
),将其视为一个键,另外,undefined
和null
也是两个不同的键。虽然NaN不严格相等于自身,但 Map 将其视为同一个键。
Map方法
size
(个数) , set
(创建), get
(获取), has
(查找) , delete
(删除)
const map = new Map([
["a", 111],
["b", 222],
]);
console.log(map.size);
console.log(map.get("a"));
map.set("c", 333);
console.log(map.size);
console.log(map.has("c"));
console.log(map.delete("c"));
console.log(map.size);
map.clear();
console.log(map.size)
遍历
用 for( of )
const map = new Map([
["a", 111],
["b", 222],
]);
console.log(map.keys());
for (let key of map.keys()) {
console.log(key);
}
for (let value of map.values()) {
console.log(value);
}
for (let item of map.entries()) {
console.log(item);
}
for (let [key, value] of map.entries()) {
console.log(key,value);
}
//迭代器模式 for( of ) 迭代 for( in ) 遍历对象