TypeScript實戰:輕松實現數字序號轉中文大寫數字

在前端開發中,我們經常會遇到【將數字序號轉換為中文大寫數字】的需求——比如表單步驟條顯示“第一步”而非“第1步”、文章章節標題用“三”代替 “3”等。今天就帶大家拆解這個常見需求的實現思路,用TypeScript寫出簡潔又安全的轉換函數。

一、需求明確:我們要解決什么問題?

首先要明確核心訴求:輸入一個數字序號(如0、1、……9),輸出對應的中文大寫數字(如一、二、十)。

需要注意兩個細節:

  1. 序號的起始值:多數場景下序號從0開始(如數組索引),此時0對應一,1對應二;若序號從1開始,則1對應一,需根據業務調整映射關系。
  2. 邊界處理:當輸入超出預設范圍的數字(如僅支持0-9,卻輸入11),需返回合理結果(空字符串、默認值或拋錯),避免程序異常。

二、常見實現方案:從簡單到靈活

方案一:對象映射

這是最直觀的實現方式,適合固定范圍的序號轉換(如僅支持0-9的序號),代碼如下:

const numberToUpperCase = (num: number): string => {// 1. 定義數字與大寫漢字的映射關系const numberMap: { [key: number]: string } = {0: '一', 1: '二', 2: '三', 3: '四', 4: '五',5: '六', 6: '七', 7: '八', 8: '九'};// 2. 檢查輸入是否在映射范圍內,存在則返回對應值,否則返回空字符串return numberMap.hasOwnProperty(num) ? numberMap[num] : '';
};

代碼拆解:

  1. 類型安全:用{[key: number]: string}明確numberMap是“數字鍵—字符串值”的對象,避免鍵類型混亂。
  2. 映射邏輯:直接通過鍵值對綁定序號與大寫漢字,查找效率(O(1)),適合固定范圍場景。
  3. 邊界處理:用hasOwnProperty檢查輸入是否為有效鍵,避免訪問undefined;超出范圍返回空字符串,方便業務層做后續處理(如顯示"–")。

方案二:數組映射(更適合連續序號)

若序號是連續的整數范圍(如0-9),用數組映射比對象更簡潔——數組索引即序號,元素即對應大寫漢字:

const indexToChinese = (num: number): string => {const chineseList = [ '一', '二', '三', '四', '五', '六', '七', '八', '九'];// 邊界處理:超出范圍拋錯,更適合嚴格場景if (num < 0 || num >= chineseList.length) {throw new Error(`當前僅支持 0-${chineseList.length - 1} 的序號,輸入值:${num}`);}return chineseList[num];
};

方案對比:

特性對象映射數組映射
適用場景非連續序號連續序號
查找效率O(1)O(1)
邊界處理返回空字符串拋錯(嚴格,適合強校驗)
擴展性需手動添加鍵值對只需在數組尾部追加元素

方案三:進階優化:支持更大范圍的數字

以上兩種方案僅支持固定范圍,若需要轉換20以上甚至百位、千位的數字,硬編碼映射表就不現實了,需用算法動態生成:

const numberToChineseAdvanced = (num: number): string => {const digits = ['零', '一','二','三','四','五','六','七','八','九'];// 位數映射(十、百、千)const units = ['', '十','百','千'];// 邊界校驗if(num < 1 || num > 9999) {return '暫支持1-9999的數字轉換';}// 數字轉字符串, 按位處理const numStr = num.toString();let result = '';for(let i = 0; i < numStr.length; i++) {const digit = parseInt(numStr[i], 10);// 計算當前位數const position = numStr.length - 1 - i;if(digit !== 0) {// 非零result += digits[digit] +units[position];} else if(i < numStr.length - 1 && parseInt(numStr[i+1], 10) !== 0) {// 零的處理result += digits[digit]}}// 特殊處理 "十"開頭 如(10 =》 “十”,而非“一十”;11=》“十一”)if(numStr.length === 2 && numStr[0] === '1') {result = result.slice(1);}return result;
}

三、總結

數字序號轉中文大寫數字的實現,核心是【根據需求選擇合適的映射/算法方案】:

  1. 簡單固定范圍(如0-9):用對象/數組映射,代碼簡潔、性能高
  2. 大范圍數字(如1-9999):用算法動態生成,避免硬編碼
  3. 邊界處理:根據業務選擇“返回空字符串”或“拋錯”,保證程序穩定性
  4. TypeScript優勢:通過類型注解明確參數/返回值類型,減少類型錯誤

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94642.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94642.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94642.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++游記】棧vs隊列vs優先級隊列

楓の個人主頁 你不能改變過去&#xff0c;但你可以改變未來 算法/C/數據結構/C Hello&#xff0c;這里是小楓。C語言與數據結構和算法初階兩個板塊都更新完畢&#xff0c;我們繼續來學習C的內容呀。C是接近底層有比較經典的語言&#xff0c;因此學習起來注定枯燥無味&#xf…

2025年網絡安全技能競賽“觀安杯”管理運維賽 WEB/PWN WP

blindpwn尋找漏洞點上來先看到讓輸入的有長度和數據&#xff0c;其他先不管&#xff0c;測試一下長度&#xff0c;發現最大為16然后blind pwn一般的話有棧溢出和格式化字符串兩種&#xff0c;這里先測試一下格式化字符串然后就會發現啥也沒有&#xff0c;但是會發現一些事情有一…

Linux 打包及壓縮基礎知識總結

一、gz 包1、常用命令命令格式&#xff1a;壓縮&#xff1a;gzip [option] filename解壓&#xff1a;gunzip [option] filename 常用選項&#xff1a;-c &#xff1a; 將壓縮數據輸出到標準輸出中&#xff0c;并保留原文件-d &#xff1a; 解壓縮,相當于gunzip-f &#xff1a; …

FOC算法第三節 等幅值變換與克拉克逆變換

FOC的過程其實就是輸入需求的電機力矩&#xff0c;把需求的電機力矩轉化為三相線電壓輸出&#xff0c;并且讓電機物理輸出你所需求的力矩的過程&#xff0c;這也被稱為電機控制三環中的力矩環&#xff0c;所有后面的位置閉環和速度閉環都得基于這個力矩環&#xff0c;而這個力矩…

解析蛋白質三維結構-Bio3D R包

最近休息時閱讀了一本書&#xff1a; 在書本第5章結構信息學章節的末尾&#xff0c;看到了一個練習題&#xff0c;張貼如下&#xff1a; 這里作者提到了一個R包&#xff0c; 看著挺有意思的&#xff0c;所以就決定小學一下&#xff0c;畢竟這年頭搞分子動力學起碼是python重火…

【開發便利】讓遠程Linux服務器能夠訪問內網git倉庫

打通網絡壁壘&#xff1a;本地Windows直連內網Git的遠程開發終極指南 場景痛點 開發主力是一臺云端的 Linux 服務器&#xff0c;代碼卻存放在無法被公網訪問的公司內網 Git 倉庫中。 本文利用 Windows 電腦作為“網絡橋梁”&#xff0c;搭建一條能自動重連的 SSH 隧道&#xff…

STM32學習日記

ADCADC簡介ADC(Analog-Digital Converter)模擬-數字轉換器ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量&#xff0c;建立模擬電路到數字電路的橋梁12位逐次逼近型ADC&#xff0c;1us轉換時間輸入電壓范圍&#xff1a;0~3.3V&#xff0c;轉換結果范圍&#xff…

文生3D實戰:用[靈龍AI API]玩轉AI 3D模型 – 第7篇

在前幾篇文章中&#xff0c;我們已經體驗了文生視頻、圖生視頻、文生圖、圖生圖、AI翻唱 等功能。本篇將進入更高階的領域 —— 文生3D。借助 [靈龍AI API]&#xff0c;你不僅能生成靜態的 3D模型&#xff0c;還可以快速產出 場景、角色、動畫&#xff0c;為游戲開發、虛擬人、…

林粒粒視頻筆記4-numpy

需要先安裝2個庫&#xff0c;一個是代碼運行平臺&#xff1a;pip3 install notebook還有一個numpy&#xff1a;pip3 install numpy1、在cmd運行環境>>jupyter notebook&#xff0c;瀏覽器自動打開頁面如下&#xff1a;2、創建一個一維數組和二維數據3、分別打印這2個數組…

Hadoop MapReduce 任務/輸入數據 分片 InputSplit 解析

InputSplitInputSplit 是對 MapReduce 作業輸入數據的一種邏輯劃分。它并不直接包含數據本身&#xff0c;而是包含了處理一小塊數據所需的信息&#xff0c;比如數據的位置、起始點和長度。框架會為每個 InputSplit 創建一個 Mapper 任務。從InputSplit.java 的注釋中我們可以得…

【力扣】面試經典150題總結04-區間/棧

1.匯總區間&#xff08;簡單&#xff09;判斷連續的范圍&#xff0c;記錄每個區間的首尾&#xff0c;存進list。2.合并區間&#xff08;中等&#xff09;先按照左端點排序&#xff0c;然后判斷右端點是否和下個區間的左端點重合&#xff0c;重疊進行合并。3.插入區間&#xff0…

SpringBoot 常用跨域處理方案

1.什么是跨域&#xff1f; 跨域是瀏覽器為了保障安全而遵循的一種規則&#xff0c;是同源策略的一部分。 同源&#xff1a;要求協議、域名、端口三者完全相同。 跨域&#xff1a;只要協議、域名、端口中有任何一個不同&#xff0c;瀏覽器就會判定為跨域請求。 跨域&#xf…

Springboot框架的“上海迪士尼”旅游管理網站設計與開發(代碼+數據庫+LW)

摘 要 隨著旅游行業的不斷發展&#xff0c;特別是主題公園的快速增長&#xff0c;如何通過現代信息技術提升旅游服務質量與管理效率成為了行業的重要課題。上海迪士尼作為中國乃至全球知名的主題公園&#xff0c;其旅游管理網站的設計與開發&#xff0c;不只需要滿足游客對信…

后臺管理系統-16-vue3之動態路由的實現

文章目錄 1 動態路由 1.1 stores/index.js(動態添加路由函數) 1.1.1 獲取菜單數據 1.1.2 動態導入組件 1.1.3 處理菜單項 1.1.4 添加路由 1.1.5 整體代碼 1.2 router/index.js(移除子路由) 1.3 Login.vue(登錄頁面) 2 多賬號bug問題 2.1 問題復現 2.2 解決多賬號路由問題(store…

社群團購平臺與定制開發開源AI智能名片S2B2C商城小程序的融合創新研究

摘要&#xff1a;本文聚焦于社群團購平臺這一在移動互聯網背景下興起的電子商務運營機構&#xff0c;深入剖析其依托移動互聯網滿足消費者多元購物需求的特點。同時&#xff0c;引入定制開發開源AI智能名片S2B2C商城小程序這一關鍵元素&#xff0c;探討二者融合所帶來的創新模式…

模型交互中的會話狀態管理實踐

模型交互中的會話狀態管理實踐 目錄 引言會話狀態的手動管理構建多輪對話消息序列追加歷史響應實現上下文共享API支持的自動會話狀態管理利用 previous_response_id 實現線程式對話模型響應數據保存與計費說明上下文窗口管理與令牌限制令牌計算與窗口溢出風險令牌工具輔助統計…

基于Java+Springboot的船舶運維系統

源碼編號&#xff1a;sy23源碼名稱&#xff1a;基于Springboot的船舶運維系統用戶類型&#xff1a;多角色&#xff0c;船員、維修人員、管理員數據庫表數量&#xff1a;9 張表主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven運行環境&#xff1a;Windows/Mac、J…

零基礎也能照做的WordPress網站安全漏洞修復 + 高級優化保姆級教程。

建議先在**暫存環境&#xff08;Staging&#xff09;**演練后再動正式站&#xff0c;避免線上故障。下面第一部分就教你“備份暫存還原演練”。 總覽導航&#xff08;按順序完成&#xff09; 備份與還原演練&#xff08;UpdraftPlus 寶塔/阿里/騰訊/七牛&#xff09;高危加固…

HI3516DV500/HI3519DV500 Docker開發環境配置

目錄一、拉取Ubuntu 18.04 docker鏡像二、查看已有鏡像三、基于鏡像創建容器1. 創建容器2. 退出容器3. 查看容器4. 啟動容器5. 進入容器6. 更新容器內部軟件源四、安裝CANN包1. 安裝基礎依賴環境2. 安裝并配置python 3.7.5配置環境變量安裝vim添加使環境變量生效檢查python版本…

實體店轉型破局之道:新零售社區商城小程序開發重構經營生態

在數字化浪潮的席卷下&#xff0c;實體店經營正經歷著前所未有的變革與挑戰。客戶進店率持續走低、同行競爭白熱化、經營成本不斷攀升、電商平臺沖擊加劇……這些痛點如同達摩克利斯之劍&#xff0c;懸在傳統實體商家的頭頂。然而&#xff0c;危機往往與機遇并存&#xff0c;新…