TypeScript

Posted by Adam on August 24, 2022
在 TypeScript 裡,字串串列其實就是字串陣列(`string[]`),我們可以用以下幾種常見的方法來「新增」或「移除」特定字串。 一、新增字串到陣列 1.1 push()(就地改變原陣列) ```ts let list: string[] = ['A', 'B']; list.push('C'); // list 現在是 ['A','B','C'] ``` 1.2 展開運算子(不改變原陣列,回傳新陣列) ```ts const list1: string[] = ['A','B']; const list2 = [...list1, 'C']; // list1 依舊是 ['A','B'],list2 是 ['A','B','C'] ``` 1.3 concat(不改變原陣列,回傳新陣列) ```ts const listA = ['A','B']; const listB = listA.concat('C'); // listA = ['A','B'],listB = ['A','B','C'] ``` 二、移除特定字串 2.1 使用 indexOf + splice(就地修改) ```ts let fruits: string[] = ['apple','banana','cherry','banana']; const target = 'banana'; // 找到第一個 banana 的索引 const idx = fruits.indexOf(target); if (idx !== -1) { fruits.splice(idx, 1); // splice(索引, 刪除數量) } // 結果 fruits 可能變成 ['apple','cherry','banana'] ``` 2.2 使用 filter(回傳新陣列,可移除所有符合條件的項目) ```ts const animals = ['cat','dog','fish','dog']; const filtered = animals.filter(a => a !== 'dog'); // filtered = ['cat','fish'] // animals 不變 ``` 2.3 若只想移除第一個符合條件的資料,又不想就地改變原陣列,可以結合 slice: ```ts function removeOne<T>(arr: T[], val: T): T[] { const i = arr.indexOf(val); if (i < 0) return arr.slice(); // 找不到就回傳淺拷貝 return [...arr.slice(0, i), ...arr.slice(i + 1)]; } const nums = [1, 2, 3, 2, 4]; const result = removeOne(nums, 2); // result = [1,3,2,4] // nums 仍然是 [1,2,3,2,4] ``` 總結: - 要 **新增**,最快的是 `push`(會改原陣列),或用展開運算子/`concat`(回傳新陣列)。 - 要 **移除**,若要改原陣列可用 `indexOf + splice`;若想保留原陣列則用 `filter`(移除所有)或自行撰寫把 `slice` + 展開運算子結合的工具函式(移除第一個)。