算法使用
Map
還算是不少的,日常開發(fā)也可使用new Map
替代某些數(shù)組操作,活到老學(xué)到老
new Map使用
JavaScript的對象
(Object)
,本質(zhì)上是鍵值對的集合(Hash結(jié)構(gòu))
,但是傳統(tǒng)上只能用字符串當(dāng)作鍵。這給它的使用帶來了很大的限制
為了解決這個問題,ES6提供了Map數(shù)據(jù)結(jié)構(gòu)。它類似于對象,也是鍵值對的集合,但是“鍵”的范圍不限于字符串,各種類型的值(包括對象)都可以當(dāng)作鍵
const map = new Map();
如果
Map
的鍵是一個簡單類型的值(數(shù)字、字符串、布爾值),則只要兩個值嚴(yán)格相等,Map
將其視為一個鍵,包括0和-0
。另外,雖然NaN不嚴(yán)格相等于自身,但Map將其視為同一個鍵
// new Map([key, value], [key, value]...);
const mapObj = new Map([[1,1],[2,2]]); //默認(rèn)帶初始化參數(shù)的定義
屬性及方法:
1. size屬性
console.log(mapObj.size); // size屬性返回Map結(jié)構(gòu)的成員總數(shù): 2
2. set(key,value)
set
方法設(shè)置key
所對應(yīng)的鍵值,然后返回整個Map
結(jié)構(gòu)。如果key
已經(jīng)有值,則鍵值會被更新,否則就新生成該鍵
// 常用寫法
let obj = new Map();
obj.set("age", 20);
obj.set(0, "attack_type");
obj.set(undefined, "definition");
3. get(key)
get
方法用于返回某個鍵對應(yīng)的值。如果該鍵不存在,則返回undefined
let obj = new Map();
obj.set("hello", 'Hello ES6!');
obj.get('hello'); // Hello ES6!
obj.get('word');
console.log(obj.get('word')); // undefined
4. has(key)
has
方法返回一個布爾值,表示該Map
對象是否包含某個鍵
let obj = new Map();
obj.set("hello", 'Hello ES6!');
obj.has('hello'); // true
obj.has('word'); // false
5. delete(key)
delete
方法用于刪除某個鍵,如果該鍵存在,則返回true
,否則返回false
let obj = new Map();
obj.set("hello", 'Hello ES6!');
obj.delete('hello'); // true
obj.delete('word'); // false
6. clear()
clear
方法用于刪除Map
對象中的所有成員
let obj = new Map();
obj.set("hello", 'Hello ES6!');
obj.clear();
7. 遍歷方法: keys()、values()、entries()、forEach()
(1). keys()
Map.prototype.keys()
: 返回一個新的Iterator
對象,包含Map
中所有的鍵
const myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
for (const key of myMap.keys()) {
console.log(key);
}
(2). values()
Map.prototype.values()
: 返回一個新的 Iterator
對象,包含 Map
中所有的值
const myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
for (const value of myMap.values()) {
console.log(value);
}
(3). entries()
Map.prototype.entries()
: 返回一個新的Iterator
對象,包含Map中所有的[鍵,值]
數(shù)組
const myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
for (const [key, value] of myMap.entries()) {
console.log(key + ": " + value);
}
for (const item of myMap.entries()) {
console.log(item);
}
(4). forEach()
Map.prototype.forEach()
: 傳入一個函數(shù),該函數(shù)被調(diào)用,傳入當(dāng)前的鍵和值,以及Map
對象本身
const myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
myMap.forEach((value, key, map) => {
console.log(key, value, map);
});
8. toString()
返回一個字符串,該字符串包含一個由所有鍵值對組成的字符串,每個鍵值對由一個逗號分隔的字符串組成文章來源:http://www.zghlxwxcb.cn/news/detail-798044.html
const myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
Map.prototype.toString = function() {
let result = '';
for (const [key, value] of this.entries()) {
result += `${key}: ${value}\n`;
}
return result;
};
console.log(myMap.toString());
9. valueOf
在調(diào)用 valueOf
方法時,Map
對象會返回自身的原始值文章來源地址http://www.zghlxwxcb.cn/news/detail-798044.html
const myMap = new Map();
myMap.set("obj", { a: 1, b: 2 })
console.log(myMap.valueOf()); // 返回 Map 對象本身
到了這里,關(guān)于【ES6 Map數(shù)據(jù)結(jié)構(gòu)】建議日常開發(fā)操作數(shù)組時使用 new Map的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!