当前位置:   article > 正文

python入门指南bl-Vue 3 高阶指南之 Map

vue3 new map

高阶指南

在进入 Vue 3 组合 API,深入响应式之前,我们需要搞懂 ES6 出现的几个 API,其中包含以下几个

map

weakMap

set

weakSet

proxy

reflect

如果不知道的小伙伴,可以自行到 MDN 进行查阅。

Map

简单来说就是用于保存键值对对象,能够记住键的原始插入顺序,对于 key 来说,任何值都可以作为一个 key,或者 value。

我们都知道,Map 是一个构造函数,也就是传统的面向对象编程的类的概念,所以可以通过以下方式来创建 map 实例:

new Map()

113a9e70-682d-4b2c-a95d-1d6b6e2cfcd2.png

属性

Map.length

属性 length 的值为 0 。想要计算一个Map 中的条目数量, 使用 Map.prototype.size.

c0af7c1e-90e0-4679-b01e-b4db6fe4b6d5.png

Map.prototype.size

返回Map对象的键/值对的数量

new Map().size

c2ff36ef-a56f-4eb4-a759-353e7e7ba6db.png

方法

Map.prototype.clear()

移除Map对象的所有键/值对 。

Map.prototype.delete(key)

如果 Map 对象中存在该元素,则移除它并返回 true;否则如果该元素不存在则返回 *false*。随后调用 Map.prototype.has(key) 将返回 false 。

Map.prototype.entries()

返回一个新的 Iterator 对象,它按插入顺序包含了Map对象中每个元素的 「[key, value]」 **数组**。

Map.prototype.forEach(callbackFn[, thisArg])

按插入顺序,为 Map对象里的每一键值对调用一次callbackFn函数。如果为forEach提供了thisArg,它将在每次回调中作为this值。

Map.prototype.get(key)

返回键对应的值,如果不存在,则返回undefined。

Map.prototype.has(key)

返回一个布尔值,表示Map实例是否包含键对应的值。

Map.prototype.keys()

返回一个新的 Iterator对象, 它按插入顺序包含了Map对象中每个元素的「键」 。

Map.prototype.set(key, value)

设置Map对象中键的值。返回该Map对象。

Map.prototype.values()

返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的「值」 。

实例

使用 Map 对象

let myMap = new Map();

let keyObj = {};

let keyFunc = function(){};

let keyString = 'a string';

37c9e460-4a9d-4170-a64e-1e0de6531296.png

添加 key

myMap.set(keyString, "Ken")

myMap.set(keyObj, 'Ken')

myMap.set(keyFunc,"ken")

422d3e45-004b-4a66-91ba-45a0a9ebcb71.png

size 获取

myMap.size;

638eef8c-5243-4fda-a1ce-6454b87b6ec1.png

读取值

myMap.get(keyFunc)

myMap.get(keyString)

myMap.get(keyObj)

10f48185-fcf6-4837-bb48-ba03fe04924e.png

将 NaN 作为 Map 的 key

NaN 也可以作为Map对象的键。虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),但下面的例子表明,NaN作为Map的键来说是没有区别的:

myMap.set(NaN, 'not a number')

myMap.get(NaN)

let otherNaN = Number('foo')

myMap.get(otherNaN)

215ab6a3-ccd2-449a-98a8-0323d0b75a31.png

使用 for .. of 方法来迭代 Map

Map可以使用for..of循环来实现迭代:

for(let [key, value] of myMap) {

console.log(key + " = " + value)

}

5a4aed30-3d0c-4ef0-8ed8-ef8151f062d9.png

循环 keys

for (let key of myMap.keys()) {

console.log(key);

}

441258fc-b1a5-45cb-8051-33f172446b95.png

循环 values

for (let value of myMap.values()) {

console.log(value);

}

6aac488c-a9fe-4a5c-91f0-dd68889939a8.png

循环 entries

for (let [key, value] of myMap.entries()) {

console.log(key + " = " + value);

}

846a0408-c932-4524-af39-e2aa74583b3a.png

使用 forEach() 方法迭代 Map

Map也可以通过forEach()方法迭代:

myMap.forEach(function(value, key){

console.log(key + " = " + value);

})

846a0408-c932-4524-af39-e2aa74583b3a.png

Map 与数组的关系

let kvArray = [["key1", "value1"], ["key2", "value2"]]

let map = new Map(kvArray)

3593a63a-5b02-4caf-af39-ff29bee7569c.png

map.get('key1')

map.get("key2")

27bc64c8-035b-4601-b18f-7faa2a60994f.png

console.log(map)

console.log(Array.from(map))

27bc64c8-035b-4601-b18f-7faa2a60994f.png

console.log([...map])

322b9e87-44b7-4f6c-a771-7236c4a0c74e.png

Array.from(map.keys())

Array.from(map.values())

Array.from(map.entries())

复制或合并 Maps

map 能像数组一样被复制:

let original = new Map([

[1, 'one']

]);

let clone = new Map(original);

console.log(clone.get(1)); // one

console.log(original === clone); // false. 浅比较 不为同一个对象的引用

9a3de22b-c23a-4df9-ac0c-4317d3cf0c8f.png

Map 对象间可以进行合并,但是会保持键的唯一性。

let first = new Map([

[1, 'one'],

[2, 'two'],

[3, 'three'],

]);

let second = new Map([

[1, 'uno'],

[2, 'dos']

]);

// 合并两个Map对象时,如果有重复的键值,则后面的会覆盖前面的。

// 展开运算符本质上是将Map对象转换成数组。

let merged = new Map([...first, ...second]);

console.log(merged.get(1)); // uno

console.log(merged.get(2)); // dos

console.log(merged.get(3)); // three

c0174311-59ba-4130-94cd-f5755bbe501e.png

Map对象也能与数组合并:

let first = new Map([

[1, 'one'],

[2, 'two'],

[3, 'three'],

]);

let second = new Map([

[1, 'uno'],

[2, 'dos']

]);

// Map对象同数组进行合并时,如果有重复的键值,则后面的会覆盖前面的。

let merged = new Map([...first, ...second, [1, 'eins']]);

console.log(merged.get(1)); // eins

console.log(merged.get(2)); // dos

console.log(merged.get(3)); // three

2f7d0749-8857-4b00-ae48-66c91e709580.png

删除与判断

let myMap = new Map()

myMap.set('bla','blaa')

myMap.set('bla2','blaa2')

console.log(myMap) // Map { 'bla' => 'blaa', 'bla2' => 'blaa2' }

myMap.has('bla') // true

myMap.delete('bla') // true

console.log(myMap) // Map { 'bla2' => 'blaa2' }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/50024
推荐阅读
相关标签
  

闽ICP备14008679号