iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0

今天一樣還是在 Chapter6 物件相關的內容裡打滾XD

Set

昨天剛提到 Map 那就不得不提到 Set

Set 是值的集合(collection of values),最小的單位是單個值(value),在 Set 中,每個值僅能出現一次,不可以有重複的值,值可以是任何類型(type)

另外 array 雖然跟 set 長得很像,但它們是兩種不同東西

  • 在 js 中,set 本質是 hash table,而 array 是 list
  • set 內的值不重複,僅有唯一,而 array 容許相同的值出現在同個 array 中
  • set 中查找是否有某特定值,其效率比 array 好
    O(1) internally as a hash table /O(log N) in search tree
    但在 js 中 set 是 hashed,所以效率為 O(1)
  • 另外 array.includes()array.indexOf() 其效率為 O(n)
  • 如果對 Set 添加相同的值,添加不會有任何作用

以下為 Set 跟 Map 的比較

Name set map
Smallest unit single value with any type key-value pairs,key and value can be any type
Feature value is unique key is unique, while the value don't. And can accept different key point to same value.
Usage handle unique values efficiently / check value existence in large value collections store key-value pairs which key is any type
Iterator Method set is iterable, can use for..of to iterate Map is iterable, can use for..of to iterate
Efficiency of Finding Value In js, a Set has O(1) to look up specific value In js, a Map has O(1) to look up specific value

Set 的常見語法

跟 map 類似,建立新的空set為 new Set()

nameOfSet.add( value ) 來設定值

let customSet = new Set();
customSet.add(function greet() {
    console.log("hello world");
});
customSet.add("Charle");
customSet.add(12);
console.log(customSet);

另外因為 Set 內的值有獨一無二的特性,因此可用來踢除陣列中重複的值
new Set(nameOdArray) 來建立 Set

const names = [
    "Andrew",
    "Danny",
    "Neil",
    "Bobby",
    "Ben",
    "Neil",
    "Bob",
    "Danny",
    "Emma",
];

const setOfNames = new Set(names);
console.log(setOfNames); // 重複的值被踢除

添加/刪除 Set 上的值 / 獲得 Set 的長度 / 查找特定值

  • 添加 Set 上的值 nameOfSet.add( value )
  • 刪除 Set 上的值 nameOfSet.delete( value )
  • 獲得 Set 的長度 nameOfSet.size
  • 查找 Set 上是否有特定鍵值 nameOfSet.has( value )
  • 清空整個 Set nameOfSet.clear()

多型 Polymorphism

讓多個介面使用相同的屬性名稱或方法名稱,相同名稱的方法在不同類別的物件而執行不同的動作
The ability of different objects to respond to the same method name in their own unique ways.

舉例來說
有個 speak method
狗物件執行 speak() 會發出 'woof'
貓物件執行 speak() 會發出 'meow'
牛物件執行 speak() 會發出 'moo'

所有物件都分享相同名稱的方法,但每個物件都表現出不一樣的結果,這就是 polymorphism

多型的優點 Advantage of Polymorphism

  • 編寫更有彈性且易於維護的程式碼
  • 使函式重複利用度提高,減少複雜度
  • 抽象化

舉例來說
makeSpeak 函式抽象化了『不同動物說話』的邏輯,且不同動物物件可以呼叫該函式達到不同叫聲的結果

function makeSpeak(animal){
    animal.speak();
}

makeSpeak(dog); 
makeSpeak(cat);

上一篇
Chapter 6 物件的秘密(Map/Associative Array)-day14
下一篇
Chapter 6 物件的秘密(Symbol)-待補-day16
系列文
溫故而知新:Eloquent Javascript 閱讀筆記16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言