Map
Map是一个带有键值的属性集合,类似Object。不同的是Map的键值可以是任意类型。包括可以使用Object对象作为键值。
Map相关api
new Map() 创建map
map.set(key,value) 保存/修改属性和键值
map.get(key) 获取属性值
map.has(key) 如果key存在返回true,否则返回false
map.delete(key) 删除指定键值对
map.clear() 清空map
map.size() 返回当前元素个数
let obj = new Map()
obj.set('hehe','wocao')
obj.set(1,2)
obj.set('fn',function(){return 1})
obj.delete(1)
console.log(obj,obj.get(1),obj.size)//Map(2) {'hehe' => 'wocao', 'fn' => ƒ},undefined,2
链式调用
map.set每次调用都会返回自身,所以当我们需要保存多个参数的时候,可以使用链式调用。
map.
set
(
'1'
,
'str1'
)
.
set
(
1
,
'num1'
)
.
set
(
true
,
'bool1'
)
;
Map迭代
map.keys()代表map的所有键值集合
map.values()代表map的所有属性值的集合
map.entries = map 本身
let recipeMap = new Map([
['cucumber', 500],
['tomatoes', 350],
['onion', 50]
]);
// 遍历所有的键(vegetables)
for (let vegetable of recipeMap.keys()) {
console.log(vegetable); // cucumber, tomatoes, onion
}
// 遍历所有的值(amounts)
for (let amount of recipeMap.values()) {
console.log(amount); // 500, 350, 50
}
// 遍历所有的实体 [key, value]
for (let entry of recipeMap) { // 与 recipeMap.entries() 相同
console.log(entry); // cucumber,500 (and so on)
}
对象和Map的相互成就
我们可以使用map来创建对象,也可以使用对象来创建map
Object.entries(object)//使用object创建map
Object.fromEntries(map)//使用map创建object
let obj = {
name: "John",
age: 30
};
let map = new Map(Object.entries(obj))
let obj1 = Object.fromEntries(map)
console.log(obj1)
set
set是一个特殊的类型集合,值的集合,没有键。个人理解下来就是一个长成对象样子的数组,只是将对象变成了set的值。
new Set(iterable) 创建一个 set,如果提供了一个 iterable 对象(通常是数组),将会从数组里面复制值到 set 中。
setName.add(value) 添加一个值,返回set本身,所以也可以使用链式方式使用
setName.delete(value) 删除一个value
setName.has(value)判断value是否存在,有返回true,没有返回false,类似对象的hasOwn
set.clear() 清空set
set.size 返回元素个数(但是set只保存不重复的,所以这个值是去重后的值)
let set = new Set();
let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
// visits,一些访客来访好几次
set.add(john);
set.add(pete);
set.add(mary);
set.add(john);
set.add(mary);
// set 只保留不重复的值
console.log( set.size ); // 3
console.log(set)
//Set(3) {{…}, {…}, {…}}
//0:
// value: {name: 'John'}
//1:
// value: {name: 'Pete'}
//2:
// value: {name: 'Mary'}
遍历
可以使用for...of或者forEach进行set的遍历。另外Map遍历的时候的方法set里也同样适用。set.keys,set.values,set.entries
for (let val of set)
{
console.log(val)
}
set.forEach(item=>{
console.log(item)
})