if (hash[arr[i]] === undefined) {
hash[arr[i]] = 1;
}
JavaScript 中 Object 本質是**鍵值對集合**(哈希表),鍵自動轉為字符串。此處 hash 變量雖名為「哈希數組」,實為**普通對象字面量 {}**。
假設 arr = ['a', 'b', 'c', 'a', 'b']
| 迭代 | arr[i] | hash[arr[i]] 初始值 | 條件判斷 | 操作 | hash 狀態 |
|---|---|---|---|---|---|
| 1 | 'a' | undefined | true | hash['a']=1 | {a:1} |
| 2 | 'b' | undefined | true | hash['b']=1 | {a:1, b:1} |
| 3 | 'c' | undefined | true | hash['c']=1 | {a:1, b:1, c:1} |
| 4 | 'a' | 1 | false | 跳過 | {a:1, b:1, c:1} |
| 5 | 'b' | 1 | false | 跳過 | {a:1, b:1, c:1} |
hash = {a:1, b:1, c:1} —— **鍵即為去重後的唯一值**,值固定為 1(僅作標記)。
hash[arr[i]] = (hash[arr[i]] || 0) + 1 → 統計各元素出現次數。hash[arr[i]] = hash[arr[i]] || []; hash[arr[i]].push(arr[i]) → 同值分組。
const unique = [...new Set(arr)]; // 去重
const counts = new Map(); // 計數
for (const v of arr) counts.set(v, (counts.get(v)||0)+1);
「哈希數組」實為 **對象鍵的唯一性** 實現 O(1) 平均查找/插入,**去重/計數/分組** 核心模式。理解「對象即哈希表」,JS 數據處理靈活度大增。