確保從列表中獲取可用值

jump__jump發表於2022-06-28

對於很多專案來說,某些配置項或查詢條件是必需的。當使用者丟失配置資料或專案下線配置項,都會導致專案發生錯誤而造成不可用的問題,這時候,開發需要提供一些兜底策略,如當前列表資料查詢不到時預設使用第一項。

ensure-get-list-val

這些東西每次都寫一下又很麻煩,所以這裡進行了一次封裝,程式碼如下:

interface EnsureGetValFromListParams<ItemType, ValueType> {
    /** 列表資料 **/
    items: ItemType[]
    value?: ValueType | undefined
    /** 列表中資料值的提取方法 **/
    getVal?: (item: ItemType) => ValueType
    /** 查詢不到資料時候返回值的位置 **/
    pos?: 'frist' | 'last'
}

// ValueType = ItemType
// 如果不提供 ValueType, 則 ValueType 預設為 ItemType
const ensureGetValFromList = <ItemType, ValueType = ItemType>({
    items,
    value,
    getVal = item => item as unknown as ValueType,
    pos = 'frist'
}: EnsureGetValFromListParams<ItemType, ValueType>): ValueType | null => {
    // 當前不是陣列直接返回 null
    if (!Array.isArray(items)) {
        return null
    }

    const count = items.length
    // 當前為空陣列直接返回 null
    if (count === 0) {
        return null;
    }

    // 沒有傳遞數值或者當前列表長度為1,直接返回列表唯一資料
    if (!value || count === 1) {
        return getVal(items[0])
    }

    // 查詢列表,是否有數值等於傳入數值
    if (items.some(item => getVal(item) === value)) {
        return value
    }

    // 返回列表第一條還是最後一條資料
    const index = pos === 'frist' ? 0 : count - 1
    return getVal(items[index])
}

程式碼在 ensure-get-list-val 中。也可以使用 npm 等工具進行安裝和使用。

鼓勵一下

如果你覺得這篇文章不錯,希望可以給與我一些鼓勵,在我的 github 部落格下幫忙 star 一下。

部落格地址

相關文章