SOURCE

console 命令行工具 X clear

                    
>
console
const data = [
    "B3","D2","F1","A9","D12",
    "A2","C1","Z0","B1","Z0",
    "B1","C1","F1","A2","D2",
    "B3","A9","D12"
]

let newData = dataSort(data)


/**
 * 数据验证
 */
function checkData(dataList){
    let isCheck = true
    for(let i = 0;i < dataList.length;i++){
        dataList[i]
    }
    return isCheck
}

/**
 * 数据排序
 */
function dataSort(dataList){
    // 数据拆分
    let jsonData = splitData(dataList)
    // 根据数据序号排序
    let numerSortData = arraySortByKey(jsonData,'number')
    // 根据数据类型排序
    let typeSortData = arraySortByKey(numerSortData,'type')
    // 还原数据
    return dataBack(typeSortData)
}

/** 
 * 将排序后的对象数组还原
 */
function dataBack(typeSortData){
    let dataList = []
    for(let i = 0;i < typeSortData.length;i ++){
        let obj = typeSortData[i]
        let str = obj.type + String(obj.number)
        dataList.push(str)
    }
    return dataList
}

/**
 * 对象数组根据key值排序
 * @param {*} data 数据
 * @param {*} key  排序字段
 * @param {*} desc 排序方式,【升序/降序(默认)】
 */
function arraySortByKey(dataList,key,desc = true){
    return dataList.sort((prev,next)=>{
        if(desc){
            if(typeof prev[key] === 'string'){
                return prev[key].localeCompare(next[key])
            }else{
                return prev[key] - next[key]
            }
            
        }else{
            if(typeof next[key] === 'string'){
                return next[key].localeCompare(prev[key])
            }else{
                return next[key] - prev[key]
            }
        }
    })
}


/**
 * 判断是否数组
 */
function isArray(dataList) {
  if (typeof Array.isArray === 'undefined') {
    return Object.prototype.toString.call(dataList) === '[object Array]'
  }
  return Array.isArray(dataList)
}

/**
 * 拆分数据源为对象数组
 */
function splitData(dataList){
    if(!isArray(dataList)) return []

    let jsonData = []
    dataList.forEach((item,index)=>{
        let type = item.charAt(0)
        let number = Number(item.substr(1,item.length))
        jsonData.push({
            type,
            number
        })
    })

    return jsonData
}
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>测试代码。。。 - JSRUN 驱动</title>
</head>
<body>
<div style="height:200px">
    <textarea 
        rows="10" 
        name="dataInput" 
        placeholder="输入数据源..."
    ><textarea>
</div>
<input type="button" value="确定"/>
</body>
</html>

div{
    width: 100%;
}
textarea{
    display: block;
    padding: 12px;
    outline: none
}