基于JS實(shí)現(xiàn)數(shù)字+字母+中文的混合排序方法
在上篇文章給大家介紹了JavaScript sort數(shù)組排序方法和自我實(shí)現(xiàn)排序方法小結(jié),用自己的方法實(shí)現(xiàn)了數(shù)字?jǐn)?shù)組的排序。
當(dāng)然,實(shí)際運(yùn)用中,我還是會使用sort方法更加方便.但是,我上一篇博文,僅僅是實(shí)現(xiàn)了數(shù)字排序,而srot方法默認(rèn)可是能給字母實(shí)現(xiàn)排序的哦!而我的代碼只能排序數(shù)字,看起來還是弱弱的.
所以,我得加上能排字母甚至中文的排序方法.
實(shí)現(xiàn)代碼
$(function(){
var arr = ["Jack","Book","Fung",76,"Love","Mark","中國","china","phone","劉德華"];
console.log('原數(shù)組');
console.log(arr);
console.log('for方法從小到大排序');
console.log(arrSortMinToMax(arr));
console.log('for方法從大到小排序');
console.log(arrSortMaxToMin(arr));
console.log('原數(shù)組');
console.log(arr);
});
function arrMinNum(arr){
var minNum = Infinity, index = -1,minVul = "";
for (var i = 0; i < arr.length; i++) {
if (typeof(arr[i]) == "string") {
if (arr[i].charCodeAt()<minNum) {
minNum = arr[i].charCodeAt();
minVul = arr[i];
index = i;
}
}else {
if (arr[i]<minNum) {
minNum = arr[i];
minVul = arr[i]
index = i;
}
}
};
return {"minNum":minVul,"index":index};
}
function arrSortMinToMax(arr){
var arrNew = [];
var arrOld = arr.concat();
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMinNum(arrOld).minNum);
arrOld.splice(arrMinNum(arrOld).index,1)
};
return (arrNew);
}
function arrMaxNum(arr){
var maxNum = -Infinity, index = -1,maxVul = "";
for (var i = 0; i < arr.length; i++) {
if (typeof(arr[i]) == "string") {
if (arr[i].charCodeAt()>maxNum) {
maxNum = arr[i].charCodeAt();
maxVul = arr[i];
index = i;
}
}else {
if (arr[i]>maxNum) {
maxNum = arr[i];
maxVul = arr[i];
index = i;
}
}
};
return {"maxNum":maxVul,"index":index};
}
function arrSortMaxToMin(arr){
var arrNew = [];
var arrOld = arr.slice(0);
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMaxNum(arrOld).maxNum);
arrOld.splice(arrMaxNum(arrOld).index,1);
};
return (arrNew);
}
運(yùn)行截圖如下:

排序原理
如果是數(shù)字,則直接是數(shù)字進(jìn)行比對
如果是字符串,則使用charCodeAt()轉(zhuǎn)換成Unicode編碼進(jìn)行排序.
Unicode 是 0 - 65535 之間的整數(shù)
其他說明
按照正常的排序邏輯,應(yīng)該是:數(shù)字比一切字母都小,字母比一切中文都小,中文應(yīng)該按照首字拼音的首字母排序.
我的這段代碼除了字母比一切中文都小這一條實(shí)現(xiàn)了,其他都沒有實(shí)現(xiàn).
邏輯也應(yīng)該可以實(shí)現(xiàn),把數(shù)字字母中文分別找出來,數(shù)字跟數(shù)組進(jìn)行比較,字母跟字母比較,中文跟中文比較,然后拼接數(shù)組
中文獲取首字的首字母可能稍微麻煩一點(diǎn).
漢字居然可以直接比對的.

如上圖所示,張飛想要做老大是有道理的.JavaScript終于在千年之后為張飛正名,當(dāng)年他就應(yīng)該是做老大的!~
相關(guān)文章
根據(jù)user-agent判斷蜘蛛代碼黑帽跳轉(zhuǎn)代碼(js版與php版本)
這篇文章主要介紹了根據(jù)user-agent判斷蜘蛛代碼黑帽跳轉(zhuǎn)代碼(js版與php版本),需要的朋友可以參考下2015-09-09
一步快速解決微信小程序中textarea層級太高遮擋其他組件
這篇文章主要給大家介紹了關(guān)于如何通過一步快速解決微信小程序中textarea層級太高遮擋其他組件問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
JS async 函數(shù)的含義和用法實(shí)例總結(jié)
這篇文章主要介紹了JS async 函數(shù)的含義和用法,結(jié)合實(shí)例形式總結(jié)分析了JS async 函數(shù)的基本功能、含義、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04

