前言
大家好,我是阿瓜。一個勵志想成為艾弗森的前端瓜 ~
我們已經分享了 radash
庫中陣列、物件等相關的方法,大家感興趣的可以前往主頁檢視閱讀;
或許你最近在某個地方聽過或者看過 radash
這個詞,它是一個typescript編寫的方法庫,如果你想試試使用它,我們有簡單使用示例,直接套用類似情景使用即可,如果你想深入瞭解一下這個庫,想閱讀一下它的原始碼,我們也會帶你逐行解析程式碼;不管是哪種,相信你都能在文章裡有所收穫;
後續所有方法分享完畢後,我們會整理一份詳細目錄文章以及思維導圖,方便大家查閱使用。
隨機方法
draw:取出陣列中的隨機項
-
使用說明
- 功能說明:從一個陣列中隨機抽取一個元素。如果陣列為空,則返回
null
。 - 引數:陣列。
- 返回值:陣列中的隨機項。
- 功能說明:從一個陣列中隨機抽取一個元素。如果陣列為空,則返回
-
使用程式碼示例
import { draw } from 'radash' const fish = ['marlin', 'bass', 'trout'] draw(fish) // => a random fish
-
原始碼解析
// 定義一個泛型函式 `draw`。 export const draw = <T>( // `array` 是一個只讀陣列,包含要從中抽取元素的元素。 array: readonly T[] ): T | null => { // 獲取陣列的長度。 const max = array.length // 如果陣列為空(長度為0),返回 `null`。 if (max === 0) { return null } // 使用 `random` 函式獲取一個隨機索引。該索引介於 0(包括)和陣列長度減1(包括)之間。 const index = random(0, max - 1) // 返回陣列中該隨機索引位置的元素。 return array[index] }
- 方法流程說明:
draw
函式接受一個陣列array
作為引數。- 如果
array
為空(長度為0),函式返回null
。 - 如果
array
非空,函式呼叫random
函式獲取一個隨機索引,該索引在陣列的有效範圍內。 - 函式返回陣列中該隨機索引位置的元素。
- 方法流程說明:
random:生成一個隨機數
-
使用說明
- 功能說明:生成一個指定範圍內的隨機整數。包含最大值和最小值。
- 引數:最大值、最小值
- 返回值:返回一個範圍內的隨機整數。
-
使用程式碼示例
import { random } from 'radash' random(0, 100) // => a random number between 0 and 100
-
原始碼解析
// 定義一個名為 `random` 的函式。 export const random = (min: number, max: number) => { // 使用 `Math.random` 生成一個介於 0(包含)和 1(不包含)之間的隨機數, // 然後乘以 `(max - min + 1)` 使得結果分佈在 `[min, max]` 的範圍內。 // 最後,使用 `Math.floor` 向下取整,以確保結果是一個整數。 return Math.floor(Math.random() * (max - min + 1) + min) }
-
方法流程說明:
random
函式接受兩個數字引數min
和max
。- 使用
Math.random()
生成一個隨機浮點數,它的值在 0(包含)和 1(不包含)之間。 - 將這個隨機數乘以
(max - min + 1)
,擴充套件其範圍到[min, max]
。 - 加上
min
以調整範圍的起點。 - 使用
Math.floor()
對結果進行向下取整,以確保返回值是介於min
和max
之間的一個整數。 - 返回這個隨機整數。
-
shuffle:隨機打亂陣列的順序
-
使用說明
- 功能說明:這個函式用於打亂(洗牌)一個陣列中元素的順序。
- 引數:需要打亂的陣列。
- 返回值:打亂後的陣列。
-
使用程式碼示例
import { shuffle } from 'radash' const fish = [ { name: 'Marlin', weight: 105, source: 'ocean' }, { name: 'Salmon', weight: 22, source: 'river' }, { name: 'Salmon', weight: 22, source: 'river' } ] shuffle(fish)
-
原始碼解析
// 定義一個泛型函式 `shuffle`。 export const shuffle = <T>(array: readonly T[]): T[] => { // 鏈式呼叫幾個陣列方法來打亂陣列。 return array // 首先,使用 `map` 方法將每個陣列元素 `a` 轉換為一個包含隨機數和原始值的物件。 .map(a => ({ rand: Math.random(), value: a })) // 接著,使用 `sort` 方法對這些物件進行排序。 // 排序依據是每個物件的 `rand` 屬性,即之前生成的隨機數。 .sort((a, b) => a.rand - b.rand) // 最後,使用 `map` 方法將排序後的物件陣列轉換回原始值陣列。 .map(a => a.value) }
-
方法流程說明:
shuffle
函式接受一個陣列array
作為引數。- 使用
map
方法生成一個新的陣列,其中每個元素都是一個包含原始元素和一個隨機數的物件。 - 使用
sort
方法對這個新陣列進行排序。排序的依據是每個物件的隨機數屬性rand
。 - 由於隨機數是隨機生成的,這種排序實際上將陣列元素隨機化。
- 使用另一個
map
方法提取排序後的物件陣列中的原始值,並形成一個新的陣列。 - 返回這個新的、已打亂順序的陣列。
-
uid:生成一個指定長度的隨機識別符號
-
使用說明
- 功能說明:用於生成一個指定長度的隨機字串,該字串由大寫字母、小寫字母、數字以及可選的特殊字元組成。
- 引數:長度、可選的隨機識別符號。
- 返回值:生成的隨機字串。
-
使用程式碼示例
import { uid } from 'radash' uid(7) // => UaOKdlW uid(20, '*') // => dyJdbC*NsEgcnGjTHS
-
原始碼解析
// 定義一個泛型函式 `iterate`。 export const iterate = <T>( // `count` 是要執行的迭代次數。 count: number, // `func` 是每次迭代呼叫的函式,它接受當前的值和迭代次數,並返回新的值。 func: (currentValue: T, iteration: number) => T, // `initValue` 是迭代的初始值。 initValue: T ) => { // 初始化 `value` 為初始值。 let value = initValue // 使用 `for` 迴圈執行指定次數的迭代。 for (let i = 1; i <= count; i++) { // 在每次迭代中,呼叫 `func` 函式並更新 `value`。 value = func(value, i) } // 返回最終的 `value`。 return value } // 定義一個名為 `uid` 的函式。 export const uid = (length: number, specials: string = '') => { // 定義一個字符集,包含大小寫字母、數字,以及可選的特殊字元。 const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' + specials // 呼叫 `iterate` 函式生成隨機字串。 return iterate( length, // `iterate` 函式的第二個引數是一個累加器函式,它接受當前的累加值 `acc`。 acc => { // 在每次迭代中,透過 `random` 函式獲取 `characters` 中的一個隨機字元, // 並將其新增到累加值 `acc` 末尾。 return acc + characters.charAt(random(0, characters.length - 1)) }, // `iterate` 函式的第三個引數是初始累加值,這裡是一個空字串。 '' ) }
-
方法流程說明:
uid
函式接受length
和可選的specials
作為引數。- 函式定義了一個包含所有可用字元的字串
characters
。 - 函式使用
iterate
方法生成隨機字串。iterate
函式接受三個引數:迭代次數、累加器函式和初始累加值。 - 在每次迭代中,累加器函式使用
random
函式獲取characters
中的一個隨機索引,並透過charAt
方法獲取對應的字元。 - 累加器函式將隨機字元新增到累加值
acc
末尾。 iterate
函式返回生成的隨機字串。
-
series:建立一個有序的序列物件
-
使用說明
- 功能說明:用於建立一個物件,該物件提供多種操作傳入的
items
陣列的方法。這些方法包括獲取最小/最大元素、第一個/最後一個元素、下一個/前一個元素以及旋轉陣列中元素的位置。 - 引數:陣列、對映函式。
- 返回值:返回一個包含多個方法的物件。
- 功能說明:用於建立一個物件,該物件提供多種操作傳入的
-
使用程式碼示例
import { series } from 'radash' type Weekday = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' const weekdays = series<Weekday>([ 'monday', 'tuesday', 'wednesday', 'thursday', 'friday' ]) weekdays.min('tuesday', 'thursday') // => 'tuesday' weekdays.max('wednesday', 'monday') // => 'wednesday' weekdays.next('wednesday') // => 'thursday' weekdays.previous('tuesday') // => 'monday' weekdays.first() // => 'monday' weekdays.last() // => 'friday' weekdays.next('friday') // => null weekdays.next('friday', weekdays.first()) // => 'monday' weekdays.spin('monday', 3) // => 'thursday'
-
原始碼解析
// 定義一個函式 `series`。 const series = (items, toKey = (item) => `${item}`) => { // 使用 `reduce` 方法構建兩個對映:一個是元素到索引的對映,另一個是索引到元素的對映。 const { indexesByKey, itemsByIndex } = items.reduce( (acc, item, idx) => ({ indexesByKey: { ...acc.indexesByKey, [toKey(item)]: idx }, itemsByIndex: { ...acc.itemsByIndex, [idx]: item } }), { indexesByKey: {}, itemsByIndex: {} } ); // 定義一個 `min` 函式,它返回兩個元素中索引較小的元素。 const min = (a, b) => { return indexesByKey[toKey(a)] < indexesByKey[toKey(b)] ? a : b; }; // 定義一個 `max` 函式,它返回兩個元素中索引較大的元素。 const max = (a, b) => { return indexesByKey[toKey(a)] > indexesByKey[toKey(b)] ? a : b; }; // 定義一個 `first` 函式,它返回陣列中的第一個元素。 const first = () => { return itemsByIndex[0]; }; // 定義一個 `last` 函式,它返回陣列中的最後一個元素。 const last = () => { return itemsByIndex[items.length - 1]; }; // 定義一個 `next` 函式,它返回當前元素的下一個元素,如果沒有則返回預設值或第一個元素。 const next = (current, defaultValue) => { return itemsByIndex[indexesByKey[toKey(current)] + 1] ?? defaultValue ?? first(); }; // 定義一個 `previous` 函式,它返回當前元素的前一個元素,如果沒有則返回預設值或最後一個元素。 const previous = (current, defaultValue) => { return itemsByIndex[indexesByKey[toKey(current)] - 1] ?? defaultValue ?? last(); }; // 定義一個 `spin` 函式,它根據 `num` 的值旋轉當前元素的位置。 const spin = (current, num) => { if (num === 0) return current; const abs = Math.abs(num); const rel = abs > items.length ? abs % items.length : abs; return list(0, rel - 1).reduce( (acc) => num > 0 ? next(acc) : previous(acc), current ); }; // 返回一個包含所有定義好的方法的物件。 return { min, max, first, last, next, previous, spin }; };
-
方法流程說明:
series
接受一個陣列items
和一個可選的toKey
函式作為引數。- 函式使用
reduce
方法構建兩個對映:indexesByKey
將每個元素的鍵對映到其在陣列中的索引,itemsByIndex
將每個索引對映到對應的元素。 - 函式定義了一系列方法來操作
items
陣列,包括min
、max
、first
、last
、next
、previous
和spin
。 min
和max
方法用於比較兩個元素的索引並返回索引較小或較大的元素。first
和last
方法分別返回陣列中的第一個和最後一個元素。next
和previous
方法分別返回給定元素的下一個和前一個元素,如果不存在則返回預設值或第一個/最後一個元素。spin
方法根據給定的數量num
旋轉當前元素的位置,正數表示向後旋轉,負數表示向前旋轉。- 返回一個包含所有這些方法的物件。
-
字串方法
camel:將字串轉為小駝峰格式
-
使用說明
- 功能說明:用於將輸入的字串
str
轉換為駝峰命名法(camelCase)。這個函式首先將字串中的所有大寫字母轉換為小寫,並在每個大寫字母前新增一個空格,然後根據大寫字母、點號、破折號、空格或下劃線分割字串,最後將分割出的字串陣列轉換為駝峰式。 - 引數:字串str。
- 返回值:轉換後的字串。
- 功能說明:用於將輸入的字串
-
使用程式碼示例
import { camel } from 'radash' camel('green fish blue fish') // => greenFishBlueFish
-
原始碼解析
// 定義一個函式 `camel`。 export const camel = (str: string): string => { // 使用一系列字串方法處理輸入字串 `str`。 const parts = str // 使用 `replace` 方法將連續的大寫字母轉換為小寫,並在每個大寫字母前新增一個空格。 ?.replace(/([A-Z])+/g, capitalize) // 使用 `split` 方法根據大寫字母或點號、破折號、空格、下劃線分割字串。 ?.split(/(?=[A-Z])|[\.\-\s_]/) // 使用 `map` 方法將每個字串轉換為小寫。 .map(x => x.toLowerCase()) ?? [] // 如果處理後的字串陣列 `parts` 為空,則返回空字串。 if (parts.length === 0) return '' // 如果 `parts` 只有一個元素,則返回該元素。 if (parts.length === 1) return parts[0] // 使用 `reduce` 方法將 `parts` 中的字串組合成駝峰命名法。 return parts.reduce((acc, part) => { // 將當前字串 `part` 的首字母大寫,然後將其與累加器字串 `acc` 連線。 return `${acc}${part.charAt(0).toUpperCase()}${part.slice(1)}` }) }
-
方法流程說明:
camel
函式接受一個字串str
作為引數。- 使用
replace
方法將連續的大寫字母轉換為小寫,並在每個大寫字母前新增一個空格。 - 使用
split
方法根據大寫字母或特殊字元分割字串。 - 使用
map
方法將每個字串轉換為小寫。 - 如果處理後的字串陣列
parts
為空,則返回空字串。 - 如果
parts
只有一個元素,則返回該元素。 - 如果
parts
有多個元素,使用reduce
方法組合它們為駝峰命名法的字串。 - 返回組合後的駝峰命名法字串。
-
capitalize:將字串首字母轉為大寫
-
使用說明
- 功能說明:於將輸入字串
str
的首字母大寫,其餘字母小寫。如果輸入字串為空或長度為0,則返回空字串。 - 引數:需要處理的字串。
- 返回值:處理後的字串。
- 功能說明:於將輸入字串
-
使用程式碼示例
import { capitalize } from 'radash' capitalize('green fish blue FISH') // => Green fish blue fish
-
原始碼解析
// 定義一個名為 `capitalize` 的函式。 export const capitalize = (str: string): string => { // 檢查輸入字串是否為空或長度為0,如果是,則返回空字串。 if (!str || str.length === 0) return '' // 將整個字串轉換為小寫。 const lower = str.toLowerCase() // 返回一個新字串,其中首字母大寫,其餘部分為小寫。 // 使用 `substring` 方法獲取第一個字元並將其轉換為大寫, // 然後將其與字串的剩餘部分(從第二個字元開始)連線起來。 return lower.substring(0, 1).toUpperCase() + lower.substring(1, lower.length) }
-
方法流程說明:
capitalize
函式接受一個字串str
作為引數。- 檢查
str
是否為空或長度為0,如果是,則返回空字串。 - 將整個字串轉換為小寫。
- 使用
substring
方法獲取字串的第一個字元,並使用toUpperCase
方法將其轉換為大寫。 - 使用另一個
substring
方法獲取字串的剩餘部分(從第二個字元開始)。 - 將首字母大寫的字元與剩餘的小寫字串連線起來。
- 返回處理後的字串。
-
dash:把字串轉為短橫線(-)分隔並且全小寫的格式
-
使用說明
- 功能說明:用於將輸入字串
str
轉換為短橫線命名法(kebab-case)。這個函式首先將字串中的所有大寫字母轉換為小寫,並在每個大寫字母前新增一個短橫線,然後根據大寫字母、點號、破折號、空格或下劃線分割字串,最後將分割出的字串陣列轉換為短橫線命名法。 - 引數:需要處理的字串。
- 返回值:組合後的短橫線命名法字串。
- 功能說明:用於將輸入字串
-
使用程式碼示例
import { dash } from 'radash' dash('green fish blue fish') // => green-fish-blue-fish
-
原始碼解析
// 定義一個名為 `dash` 的函式。 export const dash = (str: string): string => { // 使用一系列字串方法處理輸入字串 `str`。 const parts = str // 使用 `replace` 方法將連續的大寫字母轉換為小寫,並在每個大寫字母前新增一個短橫線。 // 這裡假設 `capitalize` 函式會進行相應的轉換,但實際上這可能不是預期的行為。 ?.replace(/([A-Z])+/g, capitalize) // 使用 `split` 方法根據大寫字母或點號、破折號、空格、下劃線分割字串。 ?.split(/(?=[A-Z])|[\.\-\s_]/) // 使用 `map` 方法將每個字串轉換為小寫。 .map(x => x.toLowerCase()) ?? [] // 如果處理後的字串陣列 `parts` 為空,則返回空字串。 if (parts.length === 0) return '' // 如果 `parts` 只有一個元素,則返回該元素。 if (parts.length === 1) return parts[0] // 使用 `reduce` 方法將 `parts` 中的字串組合成短橫線命名法。 return parts.reduce((acc, part) => { // 將當前字串 `part` 轉換為小寫,並用短橫線連線到累加器字串 `acc`。 return `${acc}-${part.toLowerCase()}` }) }
-
方法流程說明:
dash
函式接受一個字串str
作為引數。- 使用
replace
方法將大寫字母前新增短橫線並轉換為小寫。 - 使用
split
方法根據特殊字元分割字串。 - 使用
map
方法將每個字串轉換為小寫。 - 如果處理後的字串陣列
parts
為空,則返回空字串。 - 如果
parts
只有一個元素,則返回該元素。 - 如果
parts
有多個元素,使用reduce
方法組合它們為短橫線命名法的字串。 - 返回組合後的短橫線命名法字串。
-
pascal:將字串轉為大駝峰命名的格式
-
使用說明
- 功能說明:用於將輸入字串
str
轉換為帕斯卡命名法(PascalCase),即每個單詞的首字母大寫,其餘字母小寫,且單詞之間沒有分隔符。如果輸入字串為空或長度為0,則返回空字串。 - 引數:需要處理的字串。
- 返回值:處理後的大駝峰命名法的字串。
- 功能說明:用於將輸入字串
-
使用程式碼示例
import { pascal } from 'radash' pascal('hello world') // => 'HelloWorld' pascal('va va boom') // => 'VaVaBoom'
-
原始碼解析
// 定義一個名為 `pascal` 的函式。 export const pascal = (str: string): string => { // 使用 `split` 方法根據點號、破折號、空格、下劃線分割字串,並將每個部分轉換為小寫。 const parts = str?.split(/[\.\-\s_]/).map(x => x.toLowerCase()) ?? [] // 如果處理後的字串陣列 `parts` 為空,則返回空字串。 if (parts.length === 0) return '' // 使用 `map` 方法將 `parts` 中的每個字串的首字母大寫。 // 使用 `charAt` 方法獲取第一個字元並將其轉換為大寫, // 然後將其與字串的剩餘部分(從第二個字元開始)連線起來。 // 使用 `join` 方法將這些首字母大寫的字串連線成一個單一的字串。 return parts.map(str => str.charAt(0).toUpperCase() + str.slice(1)).join('') }
-
方法流程說明:
pascal
函式接受一個字串str
作為引數。- 使用
split
方法根據特殊字元分割字串,並將每個字串轉換為小寫。 - 如果處理後的字串陣列
parts
為空,則返回空字串。 - 使用
map
方法遍歷parts
陣列,將每個字串的首字母大寫。 - 使用
join
方法將首字母大寫的字串陣列連線成一個單一的字串。 - 返回處理後的帕斯卡命名法字串。
-
snake:將字串轉換為下劃線格式
-
使用說明
- 功能說明:用於將輸入字串
str
轉換為蛇形命名法(snake_case)。這個函式接受一個字串和一個可選的options
物件作為引數,options
物件中的splitOnNumber
屬性用於指定是否在字母和緊隨其後的數字之間新增下劃線。 - 引數:需要處理的字串、配置物件(可選)。
- 返回值:處理後的字串。
- 功能說明:用於將輸入字串
-
使用程式碼示例
import { snake } from 'radash' snake('green fish blue fish') // => green_fish_blue_fish snake('5green fish 2blue fish') // => 5_green_fish_2_blue_fish snake('5green fish 2blue fish', { splitOnNumber: false }) // => 5green_fish_2blue_fish
-
原始碼解析
// 定義一個名為 `snake` 的函式。 export const snake = ( // `str` 是要轉換的字串。 str: string, // `options` 是一個可選的配置物件。 options?: { // `splitOnNumber` 用於指定是否在字母和數字之間新增下劃線。 splitOnNumber?: boolean } ): string => { // 使用 `replace` 和 `split` 方法處理輸入字串 `str`,並將每個部分轉換為小寫。 const parts = str // 使用 `replace` 方法將連續的大寫字母轉換為大寫,並在每個大寫字母前新增一個空格。 ?.replace(/([A-Z])+/g, capitalize) // 使用 `split` 方法根據大寫字母或點號、破折號、空格、下劃線分割字串。 .split(/(?=[A-Z])|[\.\-\s_]/) // 使用 `map` 方法將每個字串轉換為小寫。 .map(x => x.toLowerCase()) ?? [] // 如果處理後的字串陣列 `parts` 為空,則返回空字串。 if (parts.length === 0) return '' // 如果 `parts` 只有一個元素,則返回該元素。 if (parts.length === 1) return parts[0] // 使用 `reduce` 方法將 `parts` 中的字串組合成蛇形命名法。 const result = parts.reduce((acc, part) => { // 將當前字串 `part` 轉換為小寫,並用下劃線連線到累加器字串 `acc`。 return `${acc}_${part.toLowerCase()}` }) // 根據 `options` 中的 `splitOnNumber` 屬性確定是否在字母和數字之間新增下劃線。 return options?.splitOnNumber === false ? result // 如果 `splitOnNumber` 不是 false,使用 `replace` 方法在字母和緊隨其後的數字之間新增下劃線。 : result.replace(/([A-Za-z]{1}[0-9]{1})/, val => `${val[0]!}_${val[1]!}`) }
-
方法流程說明:
snake
函式接受一個字串str
和一個可選的配置物件options
作為引數。- 使用
replace
方法和split
方法將字串分割成小寫的部分,並儲存在parts
陣列中。 - 如果
parts
陣列為空,則返回空字串。 - 如果
parts
陣列只有一個元素,則返回該元素。 - 如果
parts
陣列有多個元素,使用reduce
方法組合它們為蛇形命名法的字串。 - 如果
options
物件中的splitOnNumber
屬性為false
,則返回組合後的結果字串result
。 - 如果
options
物件中的splitOnNumber
屬性不是false
或未指定,使用replace
方法在字母和數字之間新增下劃線。 - 返回處理後的蛇形命名法字串。
-
template:在字串中使用模板變數
-
使用說明
- 功能說明:用於根據提供的資料物件
data
替換字串str
中的模板佔位符。函式接受三個引數:一個字串str
,一個資料物件data
,以及一個可選的正規表示式regex
用於匹配模板佔位符。 - 引數:字串、要替換佔位符的鍵值對物件。
- 返回值:替換後的字串。
- 功能說明:用於根據提供的資料物件
-
使用程式碼示例
import { template } from 'radash' template('It is {{color}}', { color: 'blue' }) // => It is blue template('It is <color>', { color: 'blue' }, /<(.+?)>/g) // => It is blue
-
原始碼解析
// 定義一個名為 `template` 的函式。 export const template = ( // `str` 是包含模板佔位符的字串。 str: string, // `data` 是一個物件,包含要替換佔位符的鍵值對。 data: Record<string, any>, // `regex` 是一個可選的正規表示式,預設匹配雙花括號內的內容。 regex = /\{\{(.+?)\}\}/g ) => { // 使用 `matchAll` 方法和提供的正規表示式來匹配 `str` 中所有的模板佔位符。 return Array.from(str.matchAll(regex)).reduce((acc, match) => { // 在每次迭代中,使用 `replace` 方法將當前匹配的佔位符 `match[0]` // 替換為 `data` 物件中對應鍵 `match[1]` 的值。 return acc.replace(match[0], data[match[1]]) }, str) // 初始累加器是原始字串 `str`。 }
-
方法流程說明:
template
函式接受一個字串str
,一個資料物件data
,以及一個正規表示式regex
作為引數。- 函式使用
matchAll
方法和正規表示式regex
來查詢str
中所有的模板佔位符。 - 函式使用
reduce
方法遍歷匹配結果陣列。 - 對於每個匹配的佔位符,函式從
data
物件中獲取對應的值並替換佔位符。 - 返回替換後的字串。
-
title:將字串轉換為首字母大寫格式
-
使用說明
- 功能說明:用於將輸入字串
str
轉換為標題格式(Title Case),其中每個單詞的首字母大寫,其餘字母小寫,單詞之間用空格分隔。如果輸入字串為空、null
或undefined
,則返回空字串。 - 引數:字串(可能為
null
、undefined
)。 - 返回值:處理後的字串。
- 功能說明:用於將輸入字串
-
使用程式碼示例
import { title } from 'radash' title('hello world') // => 'Hello World' title('va_va_boom') // => 'Va Va Boom' title('root-hook') // => 'Root Hook' title('queryItems') // => 'Query Items'
-
原始碼解析
// 定義一個名為 `title` 的函式。 export const title = (str: string | null | undefined): string => { // 檢查輸入字串是否為空、null 或 undefined,如果是,則返回空字串。 if (!str) return '' // 使用鏈式呼叫字串方法來處理輸入字串 `str`。 return str // 使用 `split` 方法根據大寫字母或特殊字元(點號、破折號、空格、下劃線)分割字串。 .split(/(?=[A-Z])|[\.\-\s_]/) // 使用 `map` 方法去除每個部分的前後空白字元。 .map(s => s.trim()) // 使用 `filter` 方法移除空字串。 .filter(s => !!s) // 使用 `map` 方法將每個部分轉換為小寫,並使用 `capitalize` 函式將首字母大寫。 .map(s => capitalize(s.toLowerCase())) // 使用 `join` 方法將處理後的字串陣列用空格連線成一個單一的字串。 .join(' ') }
-
方法流程說明:
title
函式接受一個可能為空、null
或undefined
的字串str
作為引數。- 如果
str
是空、null
或undefined
,函式返回空字串。 - 使用
split
方法將字串分割成單詞陣列。 - 使用
map
方法去除單詞的前後空白字元。 - 使用
filter
方法移除空字串,確保只處理實際的單詞。 - 使用另一個
map
方法將每個單詞轉換為小寫,並使用capitalize
函式將單詞的首字母大寫。 - 使用
join
方法將單詞陣列連線成一個單一的字串,單詞之間用空格分隔。 - 返回處理後的標題格式字串。。
-
trim:去除字串首尾的指定字元
-
使用說明
- 功能說明:用於從字串的開頭和結尾去除指定的字元。如果輸入字串為空、
null
或undefined
,則返回空字串。charsToTrim
引數指定了要去除的字元,預設為去除空格。 - 引數:需要處理的字串、需要刪除的字元。
- 返回值:處理後的字串。
- 功能說明:用於從字串的開頭和結尾去除指定的字元。如果輸入字串為空、
-
使用程式碼示例
import { trim } from 'radash' trim(' hello ') // => hello trim('__hello__', '_') // => hello trim('/repos/:owner/', '/') // => repos/:owner
-
原始碼解析
// 定義一個名為 `trim` 的函式。 export const trim = ( // `str` 是要處理的字串,可以為空、null 或 undefined。 str: string | null | undefined, // `charsToTrim` 是一個字串,包含要從 `str` 的開頭和結尾去除的字元,預設為去除空格。 charsToTrim: string = ' ' ) => { // 如果 `str` 為空、null 或 undefined,返回空字串。 if (!str) return '' // 使用 `replace` 方法將 `charsToTrim` 中的非字母數字字元轉義, // 以確保在建立正規表示式時將它們視為普通字元而非特殊字元。 const toTrim = charsToTrim.replace(/[\W]{1}/g, '\\$&') // 建立一個正規表示式,用於匹配 `str` 開頭和結尾的 `toTrim` 中的字元。 const regex = new RegExp(`^[${toTrim}]+|[${toTrim}]+$`, 'g') // 使用 `replace` 方法和正規表示式 `regex` 從 `str` 的開頭和結尾去除匹配的字元。 return str.replace(regex, '') }
-
方法流程說明:
trim
函式接受一個字串str
和一個要去除的字符集charsToTrim
作為引數。- 如果
str
是空、null
或undefined
,函式返回空字串。 charsToTrim
中的非字母數字字元被轉義,以便在正規表示式中作為普通字元處理。- 使用
new RegExp
建立一個正規表示式,它匹配str
開頭和結尾的charsToTrim
中的字元。 - 使用
replace
方法將匹配的字元替換為空字串,從而去除str
開頭和結尾的charsToTrim
中的字元。 - 返回處理後的字串。
-
最後
我相信能看到最後的都是帥氣多金又想進步的~~~~人才。
如果你想檢視其他 radash
相關方法,前往主頁檢視
等所有方法更新完畢,作者會整理一份radash
完整方法目錄上傳,包括思維導圖和使用目錄。
大家有任何問題或見解,歡迎評論區留言交流和批評指正!!!
你的每一個收藏都是作者寫作的動力!!!