# Array 與 Object 擴充

`Array.prototype` 與 `Object.prototype` 新增的負索引存取、聚合與存在判斷。

## Array

原始碼：`src/prototype/Array.ts`

| 方法／屬性 | 說明 |
| --- | --- |
| `arr.$sum` | 透過 `reduce` 計算數值陣列總和 |
| `arr.$shuffle` | 原地 Fisher–Yates 洗牌；回傳 `this` |
| `arr.$map` | 每個項目的 `value → index` 組成的 `Map` |
| `arr._(value, index?)` | 支援負索引的插入（`splice`）；省略 `index` 時附加至末尾 |
| `arr.$(index)` | 支援負索引的讀取 |
| `arr.$i(target)` | `indexOf(target)`，找不到時回傳 `undefined` 而非 `-1` |
| `arr.$_(index)` | 支援負索引的移除（`splice`）|
| `arr.$$(target?)` | 無參數時判斷非空，有參數時判斷 `target` 是否存在 |
| `arr.$req(body)` | 將陣列以 `/` 串接為 URL 路徑片段，再對該路徑呼叫 `$req` |

## Object

原始碼：`src/prototype/Object.ts`（擴充 `Object.prototype`，故適用於純物件）

| 方法／屬性 | 說明 |
| --- | --- |
| `obj.length` | `Object.keys(this).length` |
| `obj.$keys` / `obj.$values` | `Object.keys(this)` / `Object.values(this)` |
| `obj.$map` | 自身可列舉屬性組成的 `Map` |
| `obj.forEach(cb)` | 類陣列迭代：對自身可列舉屬性執行 `cb(key, value)` |
| `obj._(key, value, replace = true)` | 條件式設定——僅當 `replace` 為 `true` 時才覆蓋已存在的鍵 |
| `obj.$$(key?)` | 有 `key` 時為 `hasOwnProperty(key)`，否則為 `this.length > 0` |
