ES6第五天学习Map对象

mac2026-01-02  5

一、Map

1.1、Map是什么?

Map是一组键值对的解构,具有极快的查找对象例如: var names = ['Michael', 'Bob', 'Tracy']; var scores = [95, 75, 85]; //名字和分数一一对应若是要查找对应人的分数是比较麻烦

1.2、Map的定义

语法:初始化Map需要一个二维数组,或者直接初始化一个空Map let myMap=new Map(); //Map可以传递参数也就是构造函数的赋值类似 var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]); var m = new Map(); // 空Map m.set('Adam', 67); // 添加新的key-value m.set('Bob', 59); m.has('Adam'); // 是否存在key 'Adam': true m.get('Adam'); // 67 m.delete('Adam'); // 删除key 'Adam' m.get('Adam'); // undefined 如果用Map实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用JavaScript写一个Map如下: var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]); m.get('Michael'); // 95 注意:由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的覆盖 var m = new Map(); m.set('Adam', 67); m.set('Adam', 88); m.get('Adam'); // 88

1.3、Map的一些方法

1.3.1、set()

set():两个参数一个是key一个是value ----set() 方法为 Map 对象添加或更新一个指定了键(key)和值(value)的(新)键值对。 -----语法: myMap.set(key, value); —返回值 Map对象

var myMap = new Map(); // 将一个新元素添加到 Map 对象 myMap.set("bar", "foo"); myMap.set(1, "foobar"); // 在Map对象中更新某个元素的值 myMap.set("bar", "baz"); 链式使用set // Add new elements to the map with chaining. myMap.set('bar', 'foo') .set(1, 'foobar') .set(2, 'baz');

1.3.2、get()

get() 方法返回某个 Map 对象中的一个指定元素。语法: myMap.get(key);

—参数

必须参数,也是它唯一的参数,要从目标 Map 对象中获取的元素的键。 —返回值返回一个 Map 对象中与指定键相关联的值,如果找不到这个键则返回 undefined。 var myMap = new Map(); myMap.set("bar", "foo"); myMap.get("bar"); // 返回 "foo" myMap.get("baz"); // 返回 undefined

1.3.3、clear()

—clear()方法会移除Map对象中的所有元素。

语法 myMap.clear(); 返回值 undefined. var myMap = new Map(); myMap.set("bar", "baz"); myMap.set(1, "foo"); myMap.size; // 2 myMap.has("bar"); // true myMap.clear(); myMap.size; // 0 myMap.has("bar") // false

1.3.4、delete(key)

—delete() 方法用于移除 Map 对象中指定的元素。

语法: myMap.delete(key);

参数:key—必须。从 Map 对象中移除的元素的键。

返回值:Boolean ----如果 Map 对象中存在该元素,则移除它并返回 true;否则如果-----该元素不存在则返回 false。

实例:

var myMap = new Map(); myMap.set("bar", "foo"); myMap.delete("bar"); // 返回 true。成功地移除元素 myMap.has("bar"); // 返回 false。"bar" 元素将不再存在于 Map 实例中

1.3.5、entries()

entries() 方法返回一个新的包含 [key, value] 对的 Iterator 对象,返回的迭代器的迭代顺序与 Map 对象的插入顺序相同。 -语法:

myMap.entries()

-返回值 一个新的 Map 迭代器对象.

例子 var myMap = new Map(); myMap.set("0", "foo"); myMap.set(1, "bar"); myMap.set({}, "baz"); var mapIter = myMap.entries(); console.log(mapIter.next().value); // ["0", "foo"] console.log(mapIter.next().value); // [1, "bar"] console.log(mapIter.next().value); // [Object, "baz"]

1.3.6、forEach()

–forEach() 方法将会以插入顺序对 Map 对象中的每一个键值对执行一次参数中提供的回调函数。

语法 myMap.forEach(callback[, thisArg]) 参数

–callback 必要,每个元素所要执行的函数。 –thisArg 可选,callback 执行时其 this 的值。

返回值undefined

forEach 方法将对 Map 中真实存在的每一个元素执行一次参数中提供的回调函数,它不会对任何已经被删除的元素执行调用。 然而,它还会对键存在而值为 undefined 的元素执行调用。

callback 函数有三个参数: value - 元素的值 key - 元素的键 Map - 当前正在被遍历的对象 例子 function logMapElements(value, key, map) { console.log("m[" + key + "] = " + value); } Map([["foo", 3], ["bar", {}], ["baz", undefined]]).forEach(logMapElements); // logs: // "m[foo] = 3" // "m[bar] = [object Object]" // "m[baz] = undefined"

1.3.7、get(key)

1.3.8、keys()

var map1 = new Map(); map1.set('0', 'foo'); map1.set(1, 'bar'); var iterator1 = map1.keys(); console.log(iterator1.next().value); // expected output: "0" console.log(iterator1.next().value); // expected output: 1

1.3.9、values()

var myMap = new Map(); myMap.set("0", "foo"); myMap.set(1, "bar"); myMap.set({}, "baz"); var mapIter = myMap.values(); console.log(mapIter.next().value); // "foo" console.log(mapIter.next().value); // "bar"

has(key):返回值

Boolean 如果指定元素存在于Map中,则返回true。其他情况返回false

1.4、Maps 和 Objects 的区别

一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是,Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算,Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突;

最新回复(0)