CodeGym /Java Adesua /Frontend SELF TW /New data structures: Map, Set

New data structures: Map, Set

Frontend SELF TW
等級 45 , 課堂 2
開放

3.1 Collection Map

在 ECMAScript 2015 (ES6) 裡,JavaScript 加入了兩種新的資料結構:MapSet。 這些資料結構提供了比傳統的物件和陣列更靈活和有效的方式來存儲和管理資料集合。

Map 是一種資料結構,它允許存儲 鍵值對,其中鍵可以是任何類型,包括物件和函數。

1. 創建和初始化 Map:

JavaScript
    
      const map = new Map();
    
  

2. 添加元素:

set 方法用於向 Map 中添加新的鍵值對。

JavaScript
    
      map.set('key1', 'value1');
      map.set(2, 'value2');
      map.set({ name: 'objectKey' }, 'value3');
    
  

3. 獲取元素:

get 方法用於根據鍵獲取值。

JavaScript
    
      const map = new Map();

      map.set('key1', 'value1');
      map.set(2, 'value2');
      map.set({ name: 'objectKey' }, 'value3');

      console.log(map.get('key1')); // 'value1'
      console.log(map.get(2)); // 'value2'
    
  

4. 檢查鍵是否存在:

has 方法用於檢查鍵是否存在於 Map 中。

JavaScript
    
      const map = new Map();

      map.set('key1', 'value1');
      map.set(2, 'value2');
      map.set({ name: 'objectKey' }, 'value3');

      console.log(map.has('key1')); // true
      console.log(map.has('key3')); // false
    
  

5. 刪除元素:

delete 方法用於根據鍵刪除元素。

JavaScript
    
      const map = new Map();

      map.set('key1', 'value1');
      map.set(2, 'value2');
      map.set({ name: 'objectKey' }, 'value3');

      map.delete('key1');
      console.log(map.has('key1')); // false
    
  

6. 清除 Map:

clear 方法用於刪除 Map 中的所有元素。

JavaScript
    
      const map = new Map();

      map.set('key1', 'value1');
      map.set(2, 'value2');
      map.set({ name: 'objectKey' }, 'value3');

      map.clear();
      console.log(map.size); // 0
    
  

7. 遍歷 Map:

你可以使用 for...of 迴圈來遍歷 Map

範例:

JavaScript
    
      const map = new Map();
      map.set('key1', 'value1');
      map.set(2, 'value2');

      for (const [key, value] of map) {
        console.log(`${key}: ${value}`);
      }

      // 'key1: value1'
      // '2: value2'
    
  

3.2 Collection Set

Set 是一種資料結構,它允許存儲 任何類型的唯一值, 包括物件和原始值。

1. 創建和初始化 Set:

JavaScript
    
      const set = new Set();
    
  

2. 添加元素:

add 方法用於向 Set 中添加新值。

JavaScript
    
      set.add(1);
      set.add('value2');
      set.add({ name: 'objectValue' });
    
  

3. 檢查值是否存在:

has 方法用於檢查值是否存在於 Set 中。

JavaScript
    
      const set = new Set();

      set.add(1);
      set.add('value2');
      set.add({ name: 'objectValue' });

      console.log(set.has(1)); // true
      console.log(set.has('value3')); // false
    
  

4. 刪除元素:

delete 方法用於從 Set 中刪除值。

JavaScript
    
      const set = new Set();

      set.add(1);
      set.add('value2');
      set.add({ name: 'objectValue' });

      set.delete(1);
      console.log(set.has(1)); // false
    
  

5. 清除 Set:

clear 方法用於刪除 Set 中的所有元素。

JavaScript
    
      const set = new Set();

      set.add(1);
      set.add('value2');
      set.add({ name: 'objectValue' });

      set.clear();
      console.log(set.size); // 0
    
  

6. 遍歷 Set:

你可以使用 for...of 迴圈來遍歷 Set

JavaScript
    
      const set = new Set();
      set.add(1);
      set.add('value2');

      for (const value of set) {
        console.log(value);
      }

      // 1
      // 'value2'
    
  

3.3 Map 和 Set 的比較

Map 的優勢:

  1. 隨意鍵: 在 Map 中,鍵可以是任何類型,包括物件和函數,而在物件中,鍵只能是字串或符號。
  2. 有序元素: Map 中的元素保留插入順序,這使得以插入順序遍歷它們更容易。
  3. 集合大小: size 方法允許快速獲取 Map 中的元素數量。

Set 的優勢:

  1. 唯一值: Set 自動確保其所有元素都是唯一的。
  2. 有序元素: Set 中的元素保留插入順序,這使得以插入順序遍歷它們更容易。
  3. 優化的操作: Set 提供了優化的添加、刪除和檢查存在性的方法。

實際範例

使用 Map 存儲用戶信息的範例:

JavaScript
    
      const users = new Map();
      users.set(1, { name: 'Alice', age: 25 });
      users.set(2, { name: 'Bob', age: 30 });

      for (const [id, user] of users) {
        console.log(`User ID: ${id}, Name: ${user.name}, Age: ${user.age}`);
      }

      // User ID: 1, Name: Alice, Age: 25
      // User ID: 2, Name: Bob, Age: 30
    
  

使用 Set 過濾唯一值的範例:

JavaScript
    
      const numbers = [1, 2, 3, 1, 2, 4, 5, 3];
      const uniqueNumbers = new Set(numbers);

      for (const number of uniqueNumbers) {
        console.log(number);
      }

      // 1
      // 2
      // 3
      // 4
      // 5
    
  
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION