Javscript 實現字符數串比對排序(包含數字及中文數字)

主要代碼:?

/**
*@description: 比較兩個字符串大小
*@author: JackieZheng
*@date: 2020-12-03 19:59:39
*/
function compare(a, b) {if (a == b) {return 0;} else {let lsta = a.toString().replace(/[一二三四五六七八九十百千萬億]+/g, ChineseToNumber).split(/(\d+)/);let lstb = b.toString().replace(/[一二三四五六七八九十百千萬億]+/g, ChineseToNumber).split(/(\d+)/);let l = Math.max(lsta.length, lstb.length);for (i = 0; i < l; i++) {if (lsta[i] != lstb[i]) {if (isNaN(lsta[i] - lstb[i])) {return lsta[i] > lstb[i] ? 1 : -1;} else {return lsta[i] - lstb[i] > 0 ? 1 : -1;}}}}
}/***@description: 漢字轉數字*@author: JackieZheng*@date: 2020-12-03 19:59:39*/
function ChineseToNumber(chnStr) {//目前已知Bug:類如"三千萬億"結果不正確chnStr = chnStr.indexOf("十") == 0 ? "一" + chnStr: chnStr;var chnNumChar = {零: 0,一: 1,二: 2,三: 3,四: 4,五: 5,六: 6,七: 7,八: 8,九: 9,兩: 2};var chnNameValue = {十: {value: 10,secUnit: false},百: {value: 100,secUnit: false},千: {value: 1000,secUnit: false},萬: {value: 10000,secUnit: true},億: {value: 100000000,secUnit: true}};var rtn = 0;var section = 0;var number = 0;var unit = 1;var secUnit = false;var str = chnStr.split('');for (var i = 0; i < str.length; i++) {var num = chnNumChar[str[i]];if (typeof num !== 'undefined') {number = num;if (num === 0) {unit = 1;}if (i === str.length - 1) {section += number * unit;}} else {unit = chnNameValue[str[i]].value;secUnit = chnNameValue[str[i]].secUnit;if (secUnit) {section = (section + number) * unit;rtn += section;section = 0;} else {section += (number * unit);}number = 0;unit = unit > 1 ? unit / 10 : unit;}}return rtn + section;
}

測試:

var arr=["學生12","學生1","學生三百五","學生2","學生十五"];arr.sort(compare)----------------------------------------------------------(5) ["學生1", "學生2", "學生12", "學生十五", "學生三百五"]
0: "學生1"
1: "學生2"
2: "學生12"
3: "學生十五"
4: "學生三百五"
length: 5
__proto__: Array(0)

?

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

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

相關文章

【QGIS入門實戰精品教程】4.2:QGIS矢量數據采集(地圖數字化)案例教程

本文基于上一個實驗柵格數據地理配準,講述在QGIS中創建shp格式矢量數據(點、線、面)并進行矢量數據的采集與編輯。 文章目錄 一、實驗數據及任務二、創建Shapefile圖層三、數字化超詳細步驟一、實驗數據及任務 1. 實驗數據:為了保證實驗的連貫性,本次實驗采用的數據為上一…

快速判斷站點是否存活的 3 種編程實現

前言如何知道外部站點是否正在運行&#xff1f;如果使用瀏覽器&#xff0c;直接訪問對應站點即可。那么&#xff0c;使用 C# 以編程方式&#xff0c;如何實現呢&#xff1f;GET 請求首先想到的&#xff0c;就是使用 HttpClient 向該站點發送 HTTP 請求&#xff0c;并檢查返回狀…

jQuery.ajax實現根據不同的Content-Type做出不同的響應

使用H5ASP.NET General Handler開發項目&#xff0c;使用ajax進行前后端的通訊。有一個場景需求是根據服務器返回的不同數據類型&#xff0c;前端進行不同的響應&#xff0c;這里記錄下如何使用$.ajax實現該需求。 $.ajax({‘url‘: ‘GetWatermarkInfo.ashx‘,‘type‘:‘post…

論文的寫作要求、流程與寫作技巧

論文的寫作要求、流程與寫作技巧 廣義來說&#xff0c;凡屬論述科學技術內容的作品&#xff0c;都稱作科學著述&#xff0c;如原始論著&#xff08;論文&#xff09;、簡報、綜合報告、進展報告、文獻綜述、述評、專著、匯編、教科書和科普讀物等。但其中只有原始論著及其簡報是…

【數據結構與算法】拓撲排序問題C語言實現

拓撲排序是有向無環圖的一種應用,在實際生活中用的很多。 比如GIS專業的課程設計,許多課程需要前置課程要求,也就是說沒上過A課程、則不可能直接去學B課程,畫個圖表就是: 同理,我們教材中的范例:穿衣服的過程也是一個拓撲排序問題,如下表: 有關這個拓撲排序的模型構造…

[轉]2020年排名前20的基于SpringBoot搭建的開源項目,幫你快速進行項目搭建!

△Hollis, 一個對Coding有著獨特追求的人△ 這是Hollis的第 287 篇原創分享 作者 l Hollis 來源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09; SpringBoot一直是開發者比較青睞的一款輕量級框架&#xff0c;他不僅繼承了Spring框架原有的優秀特性&#xff0c;而…

操作系統基礎知識

操作系統的主要特性: 并發,共享,異步,虛擬性 分類 批處理系統 用戶將一批作業提交給操作系統后就不再干預&#xff0c;由操作系統控制它們自動運行 批處理操作系統的特點是&#xff1a;多道和成批處理。分時實時可以通過命令接口和程序接口方式把它的服務和功能提供給用戶 程序…

C# 搭建一個基于.NET5的WPF入門項目

概述.NET5 發布已經有一陣子了&#xff0c;今天抽空體驗一哈&#xff0c;搭建一個WPF項目實例&#xff0c;看看和傳統的.NET Framework有什么區別&#xff01;開發環境&#xff1a;VS2019 WPF框架&#xff1a;Caliburn.Micro 版本4.0.173.NET版本&#xff1a;.NET5.0項目創建步…

五個最佳案例帶你解讀 Node.js 的前后之道

Node.js 是什么&#xff1f; Node.js 采用 C語言編寫而成&#xff0c;瀏覽器內核 V8 做為執行引擎&#xff1b; Node 不是 JS 應用、而是一個 Javascript 的運行環境。 Node 保留了前端瀏覽器 js 的接口&#xff0c;沒有改寫語言本身的任何特性&#xff0c;依舊基于作用域和原型…

【ArcGIS風暴】根據海拔范圍分級統計GIMMS 3g NDVI平均值案例教程——以甘肅省為例

在論文寫作時,通常要根據區域進行統計柵格數據。本文以甘肅省dem、NDVI數據為例,講解根據海拔范圍分級統計NDVI平均值、最大值、最小值和面積等。 1. 海拔分類 dem是本案例的最基本數據,打開ArcMap,加載dem數據,如下圖所示: 首先要對dem進行分級,所使用的到的工具是重分…

【轉】知道這20個正則表達式,能讓你少寫1,000行代碼

正則表達式&#xff0c;一個十分古老而又強大的文本處理工具&#xff0c;僅僅用一段非常簡短的表達式語句&#xff0c;便能夠快速實現一個非常復雜的業務邏輯。熟練地掌握正則表達式的話&#xff0c;能夠使你的開發效率得到極大的提升。下面是技匠整理的&#xff0c;在前端開發…

Lintcode165 Merge Two Sorted Lists solution 題解

【題目描述】Merge two sorted (ascending) linked lists and return it as a new sorted list. The new sorted list should be made by splicing together the nodes of the two lists and sorted in ascending order.將兩個排序鏈表合并為一個新的排序鏈表.【題目鏈接】www.…

Dapr中國社區網站(預覽版)發布!

點擊藍字關注我們社區介紹Dapr 是一個可移植的、事件驅動的運行時&#xff0c;它使任何開發人員能夠輕松構建出彈性的、無狀態和有狀態的應用程序&#xff0c;并可運行在云平臺或邊緣計算中。Dapr 中國社區是一個以 Dapr 為中心的中立而開放的技術社區&#xff0c;為 Dapr 用戶…

【ArcGIS風暴】ArcGIS自動生成標識碼(BSM)的兩種方法案例教程

1. 標識碼編制規則 按照每個圖層要素的標識碼應具有唯一代碼的基本要求,根據《GB/T 7027-2002 信息分類和編碼的基本原則與方法》規定的信息分類原則和方法,要素標識碼采用二層 20 位層次碼結構,由村級行政區劃代碼、要素標識碼順序號構成。具體如下: (1)第一層為村級行…

數據分析入門_char01

數據分析入門_char01 轉載于:https://www.cnblogs.com/zsr0401/p/6370697.html

ubuntu kvm 部署安裝 ? 快照

cat /proc/cpuinfo | egrep vmx|svmapt-get install qemu-kvm libvirt-bin virt-managerbridge-utilslsmod | grep kvmvirsh -c qemu:///system list這個是安裝kvm 然后添加虛擬機qemu-img info aa.img 查看虛擬機現在的事什么格式qemu-img convert -f raw -O qcow2 aa.img…

將excel多個工作表(表結構相同)合并后生成csv文件

import csv import openpyxl as xls import pandas as pd import codecswb xls.load_workbook(rE:\xlsxFile.xlsx) # 獲取workbook中所有的表格 sheets wb.get_sheet_names() dataRows [] # 循環遍歷所有sheet for t in range(len(sheets)):sheet wb.get_sheet_by_name(she…

【BIM入門實戰】Revit2018項目模板、族庫圖文安裝教程

【擴展閱讀】:【MIB】Win11平臺上Revit 2018_x64簡體中文版圖文安裝與卸載完整教程 一、Revit 族庫、項目樣板缺失的產生原因 1、斷網或者網絡不穩定環境下安裝Revit。 2、Revit配置安裝界面中取消勾選“Autodesk Revit Content Librabries”。 3、下載了沒有自帶族庫的軟件…

一臺服務部署多個tomcat注意事項

第一步 添加tomcat環境變量 # vim /etc/profile加入下代碼 # TOMCAT ATALINA_BASE/usr/local/tomcat8CATALINA_HOME/usr/local/tomcat8TOMCAT_HOME/usr/local/tomcat8export ATALINA_BASE CATALINA_HOME TOMCAT_HOME 修改應用環境變量&#xff0c;是配置生效# source /etc/pro…

python 使用 sha256 函數對密碼進行加密

在 hashlib 庫中&#xff0c;可以使用 sha256 函數對密碼進行加密。下面是一個示例代碼&#xff1a; import hashlibdef hash_password(password):# 創建一個 sha256 對象sha256_hash hashlib.sha256()# 使用 update() 方法將密碼傳入 sha256 對象sha256_hash.update(passwor…