集合的概念以及和數組的區別
其實數組也是集合, 只不過數組的索引是數值類型.當想用非數值類型作為索引時, 數組就無法滿足需要了.
而 Map 集合可以保存多個鍵-值對(key-value), Set 集合可以保存多個元素.
對Map 和 Set 一般不會逐一遍歷其中的元素. Map 一般用來存儲需要頻繁取用的數據, Set 一般用來判斷某個值是否存在其中.
ES 5 中對 Map 和 Set 的模擬方法
在ES 5 中,沒有 Set和Map集合, 一般使用對象來模擬這兩種集合, 對象的屬性作為鍵(key), 以屬性值作為值(value), 即以 property: property-value 來模擬 key-value 的形式. 具體實現如下:
模擬 Map 的鍵值對集合:
// 創建一個 Map 對象var map = Object.create(null);// 添加屬性和屬性值, 即 添加 key 和 valuemap.key1 = 'value 1';map.key2 = {};// 取得 key 對應的 value console.log(map.key1); // "value 1"console.log(map.key2); // "Object {}"模擬 Set :
// 創建一個 Set 對象var set = Object.create(null);// 添加屬性和屬性值, 即 添加 key 并令其值為 true, 即表示這個key存在于集合中set.key = true;// 判斷 key 是否存在, 然后進行下一步的操作if(set.key) { ... }用對象模擬這兩種集合的缺陷
由于對象中的屬性名必須是字符串, 如果傳入的不是字符串則會強制轉換成對應的字符串類型
一般使用 if 語句來判斷一個 key 是否存在于集合中, 當這個 key 對應的 value 為 false 或者可以被強制轉換為 false 時, 則 if 語句認為這個key不存在.但是其實是存在的, 只不過 value = false 而已.
ES6 中的 Map 和 Set 集合
下面正式來討論這兩種集合的特點
Map
Map 中存儲的是 key-value 形式的鍵值對, 其中的 key 和 value 可以是任何類型的, 即對象也可以作為 key . 這比用對象來模擬的方式就靈活了很多
Map 的創建和初始化
可以用new Map()構造函數來創建一個空的 Map
// 創建一個空的 Map let map = new Map();
也可以在 Map() 構造函數中傳入一個數組來創建并初始化一個 Map. 傳入的數組是二維數組, 其中的每一個子數組都有兩個元素, 前者會被作為 key, 后者會被作為 value, 這樣就形成了一個 key-value 鍵值對. 例如:
// 用數組來創建一個 非空的 Map let array = [ // 定義一個二維數組, 數組中的每子都有兩個元素 ['key1' , 'value 1'], // key 是 字符串 "key1", value 是字符串 "value 1" [{} , 10086] , // key 是個對象, value 是數值 10086 [ 5, {} ] // key 是個數值類型, value 是對象];let map = new Map(array); // 將數組傳入 Map 構造函數中
新聞熱點
疑難解答
圖片精選