本篇文章主要在介紹split/match/indexOf/includes/search/join/concat
的用法, 會有這一次的觀念釐清, 主要是因為自己在撰寫程式的時候, 常常會搞不清楚要用哪一個語法 . 於是會開始上網找mdn, 不僅浪費時間又耗費精神, 為了加速自己開發的流程, 所以特別把用法和適用場景詳述一番.
在解釋觀念前, 最重要的就是要知道要對誰用, 俗話說的好, 找對人事情減少一半.
相信大家也知道, 資料型態可以分為Primitive 和 Object types, 這邊就先來分類一下
- Primitive: search, match, includes, split
- Object: join
- 都可: indexOf
解釋觀念
先來看看各個原生用法mdn上的解釋
search
- 定義: 執行正則表達和String對象的的匹配
- 返回值: 如果匹配成功,返回成功的索引值, 否則返回-1.
indexOf
- 定義: 方法會回傳給定元素於陣列中第一個被找到之索引,若不存在於陣列中則回傳 -1。
- 返回值: 如果匹配成功,返回成功的索引值, 否則返回-1.
- 注意事項: 不需要透過正則即可達成
match
- 定義: 如果匹配成功, 返回匹配成功的字串並轉成陣列
- 返回值: 若只呼叫match()而沒有傳入任何參數,則會回傳內含一個空字串的陣列,即[“”]。
- 注意事項:
- 不需要透過正則也有效果, 但會因此侷限, 例如只能選到大寫的字母
- 字串須為連續性, 若不是則回傳null
- 回傳字串, 不是回傳索引值
includes
- 字串定義: 使用它來判斷字串是否包含在其他字串, 透過字串找字串, 字串須為連續字元.
- 陣列定義: 使用它來判斷陣列是否包含特定元素.
- 返回值: true or false
- 注意事項:
- 可以用來判斷是否含有特定文字, 有點像是關鍵字搜尋, 另外只有支援ES6.
小結
這三個方法來說, 都是在面對str的時候去尋找相對應的值, 可以不透過正則搜尋值的indexOf
大量被使用也同時是最重要的. 適用場景就像是從陣列裡面搭配forEach, map 遍歷去尋找值.
補充: includes也可以用在陣列中, 去尋找特定值
split
- 型別轉換: 字串 ⇒ 陣列
- 定義: 面對str使用, 並在split裡面輸入想要用什麼來分割, 分割完後變成陣列
join
型別轉換: 陣列 ⇒ 字串
類似方法: toString
定義: 面對陣列使用, 適用場景為把陣列變成字串時的型別轉換.
描述: 所有陣列中的元素轉成字串型態後,連接合併成一個字串
注意事項:
- 會回傳一組新字串 , 另外的重點是前後不會加入參數
心得: 可以把join擴充成黏在一起的含義 → 經過此方法, 字要能黏在一起, 所以可以把想成陣列的轉型
小結
這兩個方法來說, 在處理大量data的時候都很常被用到, 所以一定要對他們非常熟稔
筆者目前只想到那麼多的範例, 若是有其餘範例會再補充上去.
concat
- 定義: 在陣列中合併另一數值, 陣列, func 所使用
- 返回: 會回傳一組新陣列
- 注意事項: 原始的資料不會被動用到, 沒有sideEffect
範例程式碼
search
1 | var str = "hey JudE"; |
match
1 | var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; |
indexOf
1 | const beasts = ['ant', 'bison', 'camel', 'duck', 'bison']; |
尋找元素是否存在於陣列中,若沒有則加入到陣列裡, 這個範例很值得一看再看.
includes
1 | // 1. 字串的用法 |
split
方法三是重要的用法,務必留意
1 | // 方法一: 透過變數使用, 底下寫法是無效的, 因為字串是不可變的, 更改他的值需要新開記憶體位置. |
join
1 | var arr = [1,2,3] |
concat
可以把他當成push來看, 且原始的數據也不會改變.
1 | var arr = [1, 2, 3] |
同場加映
- split 和 join 組合技為 - 逆轉字串
1 | const str = 'aszx' |
- 解構賦值
1 | let ary = 'a, b, c, d, e' |
- join和split的搭配延伸
1 | var arr = ['vue', 'react', 'angular'] |
那如果只比較值呢?
方法一: 序列化
1 | console.log(JSON.stringify(arr) === JSON.stringify(newArr));// true |
我想這邊所使用的方法, 是因為字串本身是傳值, 所以stringify後, 變成兩兩字串比較, 因此值相同, 回傳true.
方法二: every
1 | console.log(newArr.every((item, i) => item === arr[i])) // true |
透過此方法, 就是在比較陣列裡面的所有值, 是最直覺的作法
方法三: reduce
1 | console.log(newArr.reduce((isEqual, el, i) => { |
就我現在的理解, 第一個值是自定義isEqual為true, 一旦不是true, 就會跳出false.
!!
常用來強制轉型使用, 用一個才達到目的吧, 用兩個推褲子放屁..
1 | !-1 === false |
參考文獻
Array- includes
String- includes