solt排序整理

本文详细介绍了JavaScript中数组的排序方法,包括数字从小到大和从大到小排序,英文字母排序,汉字排序,以及汉字、字母、数字混合字符串的复杂排序。通过示例代码展示了如何实现这些排序,并提供了辅助函数用于判断字符串是否全为中文。这些排序算法对于处理混合数据类型的数组非常实用。
摘要由CSDN通过智能技术生成
//1.对数字的排序
let arr=[25,33,3,6,9,7,8,1,2,5,11,18,599,43];
//从小到大排序
arr = arr.sort((a,b)=>{
	return a-b
});
//从大到小排序
arr = arr.sort((a,b)=>{
	return b-a
});
//2.对英文字母排序
let arr = ['abc','bcd','aedc','bdcs','qsedd','sasdf','yrdsx'];
arr.sort((a,b)=>{
	let a1=a.toUpperCase(),
		b1=b.toUpperCase();//将字母转换为大写字母
	if(a1>b1){
		return 1
	}else  if (b1 > a1) {
        return -1;
    }else{
		return 0;
	}
});
//3.对汉字排序
let arr = ['翰合供应链公司分公司','翰合供应链公司',
'华龙供应链公司','合风供应链公司',
'大星供应链公司','鸿雨供应链公司',
'源翔供应链公司','大溪谷供应链公司',
'通万克瑞供应链公司','正成尊迅供应链公司',
'烁琳供应链公司','克生勤杰供应链公司','松特立供应链公司'];
arr.sort((a,b)=>{
	for (let i = 0; i < (a+'').length; i++) {
		const a1 = a[i];
        const b1 = b[i];
        if(b1!=undefined){
		   	if ((a1).localeCompare(b1)!=0) {
				return (a1).localeCompare(b1);
			}
		 }else{
		 	return 1
		 }
	}
});
console.log(arr);
//4.对汉字,字母,数字混合的字符串排序
/*【数字】按数值大小排序
【数字】在【字符串】前面
【非全汉字的字符串】在【全为汉字的字符串】的前面
【非全为汉字的字符串】从左到右依次比较字符,非汉字字符按Unicode 编码值排序,汉字按拼音首字母排序,汉字字符在非汉字字符的后面
【全为汉字的字符串】按拼音首字母排序*/
// 判断字符串是否全是中文
function isAllChinese(str) {
    return /^[\u4E00-\u9FA5]+$/.test(str)
}
// 判断字符是否为中文
function isChinese(char) {
    return /^[\u4E00-\u9FA5]$/.test(char)
}
let arr = ['王五', '9', 'a李四', 'abca', 'a张三', '张三', 10, 'b', '李四2', '10', 'abc123', 2, '09', 1, 12, '02', 'a', '01', 'abc11', 'abc2', '李四'];
let ASCarr = arr.sort((a, b) => {
    // 数字排在字符串前面
    if (typeof a === 'number' && typeof b === 'string') {
        return -1
    }
    if (typeof a === 'string' && typeof b === 'number') {
        return 1
    }
    // 当存在非数字时--isNaN(a)==true//a为字符串
    if (isNaN(a) || isNaN(b)) {
        // 全汉字的排在非全汉字的后面
        if (isAllChinese(a) && !isAllChinese(b)) {
            return 1
        }
        if (!isAllChinese(a) && isAllChinese(b)) {
            return -1
        }
        let result = 0
        // 依次比较两个字符串的各项字符
        a=a.toString();
        b=b.toString();
        for (let i = 0; i< ((a.length - b.length) ? b.length : a.length); i++) {
            // 汉字排在非汉字的后面
            let a1 = a[i],
            	b1 = b[i];
            		if (!isChinese(a1) && isChinese(b1)) {
		                result = -1
		            }
		            if (isChinese(a1) && !isChinese(b1)) {
		                result = 1
		            }
		        // 若两个汉字进行比较,则比较他们的拼音首字母
		            if (isChinese(a1) && isChinese(b1)) {
		            	result = a1.localeCompare(b1)
		            }
	// 若已经比较出结果,则跳出循环,不再继续比较剩余字符
		            if (result !== 0) {
		                break
		            }
        }
//只要有一个无法转换为数字——转换为字符串进行比较——先按字符排序,然后按照数字排序
        return result || a.localeCompare(b)
    } else {
        // 数字排序
        return Number(a) - Number(b)
    }
})
console.log(ASCarr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值