首页 > 其他分享 >Js文件名 排序

Js文件名 排序

时间:2022-08-25 09:01:37浏览次数:88  
标签:return 文件名 Js char notChinese charA strB strA 排序

压缩版

function arraySortByName(list){if(list===undefined||list===null){return[]}list.sort((a,b)=>{let strA=a,strB=b;if(strA===undefined||strA===null||strA===''||strA===' '||strA===' '){return-1}if(strB===undefined||strB===null||strB===''||strB===' '||strB===' '){return 1}let mB=strB.match(/\d+/g),mA=strA.match(/\d+/g);if(mB&&mA){return parseInt(mB[mB.length-1])>parseInt(mA[mA.length-1])?-1:1}else if(mB||mA){if(mB){return 1}else if(mA){return-1}}else{if((strA.split('').every(char=>notChinese(char))&&strB.split('').every(char=>notChinese(char)))||(strA.split('').every(char=>!notChinese(char))&&strB.split('').every(char=>!notChinese(char)))){return strA.localeCompare(strB)}else{const charAry=strA.split('');for(const i in charAry){if(charCompare(strA[i],strB[i])!==0){return charCompare(strA[i],strB[i])}}return-1}}});return list}function charCompare(charA,charB){if(charA===undefined||charA===null||charA===''||charA===' '||charA===' '){return-1}if(charB===undefined||charB===null||charB===''||charB===' '||charB===' '){return 1}if((notChinese(charA)&&notChinese(charB))||(!notChinese(charA)&&!notChinese(charB))){return charA.localeCompare(charB)}else{if(notChinese(charA)){return-1}else{return 1}}}function notChinese(char){const charCode=char.charCodeAt(0);return charCode>=0&&charCode<=128}

正常版

function arraySortByName(list) {
    // 前在前return 1,后在前return -1
    if (list === undefined || list === null) {
        return [];
    }
    list.sort((a, b) => { // b是数组前一个,a是数组后一个
        // 去除.jpg,.jpeg,.gif,.png
        let strA = a,
            strB = b;
        // 谁为非法值谁在前面
        if (strA === undefined || strA === null || strA === '' || strA === ' ' || strA === ' ') {
            return -1;
        }
        if (strB === undefined || strB === null || strB === '' || strB === ' ' || strB === ' ') {
            return 1;
        }
        let mB = strB.match(/\d+/g),
            mA = strA.match(/\d+/g);
        if (mB && mA) { // 全部都有数字
            return parseInt(mB[mB.length - 1]) > parseInt(mA[mA.length - 1]) ? -1 : 1;
        } else if (mB || mA) { // 有一个有数字
            if (mB) {
                return 1;
            } else if (mA) {
                return -1;
            }
        } else { // 全都无数字
            // 如果a和b中全部都是汉字,或者全部都非汉字
            if ((strA.split('').every(char => notChinese(char)) && strB.split('').every(char => notChinese(char))) || 
                    (strA.split('').every(char => !notChinese(char)) && strB.split('').every(char => !notChinese(char)))) {
                return strA.localeCompare(strB);
            } else {
                const charAry = strA.split('');
                for (const i in charAry) {
                    if (charCompare(strA[i], strB[i]) !== 0) {
                        return charCompare(strA[i], strB[i]);
                    }
                }
                return -1; // 如果通过上面的循环对比还比不出来,就无解了,直接返回-1
            }
        }
    });
    return list;
}

function charCompare(charA, charB) {
    // 谁为非法值谁在前面
    if (charA === undefined || charA === null || charA === '' || charA === ' ' || charA === ' ') {
        return -1;
    }
    if (charB === undefined || charB === null || charB === '' || charB === ' ' || charB === ' ') {
        return 1;
    }
    // 如果都为英文或者都为汉字则直接对比
    if ((notChinese(charA) && notChinese(charB)) || (!notChinese(charA) && !notChinese(charB))) {
        return charA.localeCompare(charB);
    } else {
        // 如果不都为英文或者汉字,就肯定有一个是英文,如果a是英文,返回-1,a在前,否则就是b是英文,b在前
        if (notChinese(charA)) {
            return -1;
        } else {
            return 1;
        }
    }
}

function notChinese(char) {
    const charCode = char.charCodeAt(0);
    return charCode >= 0 && charCode <= 128;
}

参考链接: js文件名数字、英文、中文优先级递减排序_驻风丶的博客-CSDN博客_js文件名排序

标签:return,文件名,Js,char,notChinese,charA,strB,strA,排序
From: https://www.cnblogs.com/sanrenblog/p/16623040.html

相关文章

  • io流查看文件名和路径以及查看目录中内容
         ......
  • 安装nodejs
    1.安装nodejs环境。node.js下载官网:http://nodejs.cn/download/点击安装包下载到电脑本地,一直点击下一步,安装完成即可。2.验证安装。键盘按下【win+R】键,输入cmd,然后......
  • CSS盒子类型与JS简介
    今日内容盒子模型所有的标签都可以看成一个快递盒1.两个快递盒之间的距离 标签之间的距离 外边距 margin2.两个快递盒的厚度 标签的边框 边框 border3.盒子内物......
  • 【前端】第3回 CSS页面布局与JS简介
    目录1.CSS盒子模型1.1margin(外边距)2.浮动布局(float)2.1float简介2.2三种取值与clear2.3解决浮动造成的父标签塌陷3.溢出属性(overflow)4.定位4.1static(静态)4.2r......
  • 前端解决跨域问题的方法:jsonp
    同源策略同源策略/SOP(Sameoriginpolicy)是一种约定,是浏览器最核心也最基本的安全功能,现在所有支持JavaScript的浏览器都会使用这个策略。如果缺少了同源策略,浏览器很容......
  • 今日内容之 CSS盒子模型和JS基础知识数据类型
    CSS盒子模型所有的标签都可以看成是一个快递盒1.margin(外边距):标签之间的距离            两个快递盒之间的距离2.border(边框):标签的边框 ......
  • DES加密解密:android、java、js
    需求:登录的时候WEB或APP将数据加密后传给JAVA后端,后端接收到数据解密后得到数据进行处理。eg:明文:12345678密文:PofrPuMcG5CiXuyR5B5ysQ==一、java端importjavax.cr......
  • JS函数封装实现控件拖拽
    js脚本exportfunctiondragBox(drag,wrap){//用于获取父容器的样式属性值functiongetCss(ele,prop){//getComputedStyle返回值是带单位的字符串,所以......
  • phantomjs实现截图
    准备阶段下载phantomjsPhantomJSAPI参考EChartsConvert浏览器查看base64编码图片方法echarts官网java后端使用freemarker生成echarts图表word流程简要说明1.下载p......
  • JS控制浏览器打印样式,分页及移除页眉页尾
    很简单,引入以下CSS即可:<style>/*分页符*/.print_gap{page-break-before:always;}.print_gap.gap_line{height:1px;background:#e5e5e5;margin:40pt030pt;......