javascript基础系列之Map

javascript基础系列之Map

常见操作

1
2
3
4
5
6
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);
console.log(map1.get('a')); // 1
console.log(map1.size); // 3

Map和Object对比

Map Object
自定义键名 Map默认不包含任何键 Object原型上的键名可能和对象上的键名有冲突
键类型 Map的键可以是任意值 Object键必须是String或是Symbol
键排序 Map中的key是有序的 Object的键是无序的
长度 Map键值对可以通过size获取 Object的键值个数只能手动计算
迭代 Map是iterable,可以被迭代 Object需要获取键名后才能被迭代
性能 频繁增删键值性能更好 添加删除字符串未优化

构造函数Map

1
2
3
4
5
6
7
8
9
10
// 构造函数Map  创建Map对象,参数可以是数组或者iterable对象
let myMap = new Map([
[1, 'one'],
[2, 'two']
]);

for (const iterator of myMap) {
console.log(iterator); // [1, 'one'] [2, "two"]
}
console.log(Map[Symbol.species]); // ƒ Map() { [native code] }

实例属性

Map.prototype.size

1
2
3
4
5
6
7
// 实例属性
// Map.prototype.size
let myMap = new Map([
[1, 'one'],
[2, 'two']
]);
console.log(myMap.size); // 2

实例方法

Map.prototype.clear

1
2
3
4
5
6
7
// Map.prototype.clear 移除Map对象中的所有元素
let myMap = new Map([
[1, 'one'],
[2, 'two']
]);
myMap.clear();
console.log(myMap); // Map(0){size:0}

Map.prototype.delete

1
2
3
4
5
6
7
// Map.prototype.delete 删除Map对象中指定的元素
let map1 = new Map([
[1, 'one'],
[2, 'two']
]);
map1.delete(2); // 删除键名为1的Map对象的元素
console.log(map1); // Map(1){2=>'two'}

Map.prototype.get

1
2
3
4
5
6
// Map.prototype.get 返回某个Map对象中的指定元素
let map1 = new Map([ // 数组会被map解析成键值对
[1, 'one'],
[2, 'two']
]);
console.log(map1.get(2)); // two

Map.prototype.has

1
2
3
4
5
6
// Map.prototype.has 判断Map中是否存在指定的元素,返回boolean值
let map2 = new Map([
[1, 'one'],
[2, 'two']
]);
console.log(map2.has(2)); // true

Map.prototype.set

1
2
3
4
5
6
7
// Map.prototype.set 给Map对象添加或更新键值对
let map3 = new Map([
[1, 'one'],
[2, 'two']
]);
map3.set(3, "three");
console.log(map3); // Map(3) {1 => 'one', 2 => 'two', 3 => 'three'}

迭代方法

Map.prototype[@@iterator]

1
2
3
4
5
6
7
8
// Map.prototype[@@iterator] 
let map1 = new Map();
map1.set("a", 1);
map1.set("b", 2);
const iterators = map1[Symbol.iterator]();
for (const item of iterators) {
console.log(item); // ['a', 1] ['b', 2]
}

Map.prototype[keys|values|entries]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Map.prototype.keys  返回包含每个元素key值的iterator对象
// Map.prototype.values 返回包含每个元素value值的iterator对象
// Map.prototype.entries 返回包含每个元素[key,value]值的iterator对象
let map1 = new Map();
map1.set("a", 1);
map1.set("b", 2);

const iteratorKeys = map1.keys();
console.log(iteratorKeys.next().value); // 'a'
console.log(iteratorKeys.next().value); // 'b

const iteratorVals = map1.values();
console.log(iteratorVals.next().value); // 1
console.log(iteratorVals.next().value); // 2

const iteratorEntries = map1.entries();
console.log(iteratorEntries.next().value); // ['a', 1]
console.log(iteratorEntries.next().value); // ['b', 2]

Map.prototype.forEach

1
2
3
4
5
6
7
 // Map.prototype.forEach 按插入顺序对Map对象中国的每个键值对执行一次处理(回调)函数
let map1 = new Map();
map1.set("a", 1);
map1.set("b", 2);
map1.forEach((value, key, map)=> {
console.log(`m[${key}]=${value}`); // m[a]=1 , m[b]=2
})
参考文档

Map