Map是一種資料結構,和前一天所介紹的加工資料的方法map()是完全不一樣的東西喔。
和Set不一樣,Map重視鍵和值(key/value)之間的關係,對於兩者之間關係的操作是使用Map的重點。
Map的用法基本上和Set差不多,一樣都有新增、取得、刪除、數量、是否存在、清除等用法,只不過Set新增內容是add;而Map新增內容是set,其他方法基本上大同小異。
let fruitMap = new Map();
在建立的時候,可以給予初始值,使用陣列
let fruitMap = new Map([["a", "apple"], ["b", "banana"], ["c", "cherry"]]);
新鍵與增(key/value)值到Map中
let fruitMap = new Map();
fruitMap.set("a", "apple");
fruitMap.set("b", "banana");
fruitMap.set("c", "cherry");
取得鍵相對應的值
let fruitMap = new Map();
fruitMap.set("a", "apple");
fruitMap.get("a") // apple
從Map中刪除某一對鍵與值
let fruitMap = new Map();
fruitMap.set("a", "apple");
fruitMap.set("b", "banana");
fruitMap.set("c", "cherry");
fruitMap.delete("c") // 刪除c和cherry這組
取得Map中的數量
let fruitMap = new Map();
fruitMap.set("a", "apple");
fruitMap.set("b", "banana");
fruitMap.set("c", "cherry");
fruitMap.size // 3
取得Map中,某個鍵是否存在。如果存在返回 true
,反之返回 false
let fruitMap = new Map();
fruitMap.set("a", "apple");
fruitMap.has("a") // true
fruitMap.has("f") // false
清空Map所有東西
let fruitMap = new Map();
fruitMap.set("a", "apple");
fruitMap.set("b", "banana");
fruitMap.set("c", "cherry"); // []
switch case方便的地方在於,可以依照各種不同的情境去寫不同的對應情況,如果對應不到,也會有預設情況。但是缺點在於如果情境很多的時候,程式碼會很長一串,極為冗長,而且不好管理。
以下是一個輸入水果種類,就會告訴告訴你現在一斤多少錢。如果沒有販售,則會告訴你現在無販售的方法。
function getFruitPriceBySwicth(fruit) {
switch (fruit) {
case "橘子":
console.log("橘子一斤200元");
break;
case "蘋果":
console.log("蘋果一斤100元");
break;
case "香蕉":
console.log("香蕉一斤80元");
break;
default:
console.log(`不好意思,我們沒有賣${fruit}`);
}
}
getFruitPriceBySwicth('西瓜') // 不好意思,我們沒有賣西瓜
getFruitPriceBySwicth('橘子') // 橘子一斤200元
function getFruitPriceByMap(fruit){
let fruitPriceMap=new Map([['橘子',200],['蘋果',100],['香蕉',80]])
let price= fruitPriceMap.get(fruit)
let result = price ? `${fruit}一斤${price}元` : `不好意思,我們沒有賣${fruit}`
console.log(result)
}
getFruitPriceByMap('西瓜') // 不好意思,我們沒有賣西瓜
getFruitPriceByMap('橘子') // 橘子一斤200元
兩個方法的結果都是一樣的。
使用map的好處就是,程式碼明顯短多了,而且更加容易維護。如果未來要增加或減少水果的種類,只要修改friutPriceMap這個物件,其他的地方都不需要修改。
但是如果使用switch case不論增加或減少都要修改case,要修改的地方就不只一行了。