数据排序_麦克机试

题目

假设有如下字符串“A12”,其中“A”表示数据类型(A-Z),“12”表示数据序号(0-9)。现在需要对一组数据先按照数据序号再按照数据类型进行排序。

例如:["B3","D2","F1","A9","D12","A2","C1","Z0","B1"]=>["Z0","B1","C1","F1","A2","D2","B3","A9","D12"]

我的思路

我们从这个数组就可以看出=>["Z0","B1","C1","F1","A2","D2","B3","A9","D12"],它是一个英文字母+数字的组合,

如果先看英文字母的话,是乱的,看不明白。

所以我选择先看数字,这一看,啊,升序排序,明白了。

这个时候再观察英文字母的规律,是在数字顺序不变的情况下,让英文字母按A-Z的顺序排列。

那么看明白了就好解决了塞,就是两个排序嘛。

我先是写了一个取出数组每一项中数字的方法:

//将字符串中的数字取出 
    function getNum(value){
        return parseInt(value.replace(value.split('')[0],''))
    }

然后写了一个方法对数字排序:

//将数组按数字排列 
    function utilOne(arr){
        for(let i = 0;i< arr.length - 1;i++){
            for(let j = i + 1;j < arr.length;j++){
                let a = getNum(arr[i])
                let b = getNum(arr[j])
                if(a > b){
                    let temp = arr[i]
                    arr[i] = arr[j]
                    arr[j] = temp
                }
            }
        }
        return arr
    }

最后是在数字顺序不变的情况下调整字母的顺序,我们可以比较字母的unicode码,[A~Z] =>[65,90],我们可以用字符串的方法 charCodeAt() 获取字母的unicode,再根据unicode进行排序。要从unicode转回字母可以用fromCharCode()

//在数字相同的时候 把数字类型升序排列 
    function utilTwo(arr){
        for(let i = 0;i< arr.length - 1;i++){
            for(let j = i + 1;j < arr.length;j++){
                let a = arr[i].split('')[0]
                let b = arr[j].split('')[0]
                let aCode = parseInt(a.charCodeAt(0)) 
                let bCode = parseInt(b.charCodeAt(0)) 
                let aNum = getNum(arr[i])
                let bNUm = getNum(arr[j])
                // 在数字相同的时候 把数字类型升序排列
                if(aCode > bCode && aNum === bNUm){
                    let temp = arr[i]
                    arr[i] = arr[j]
                    arr[j] = temp
                }
            }
        }
        return arr
    }

我写的是charCodeAt(0),后来我写博客的时候才发现,charCodeAt(index),index的意思是获取第几个的unicode码,字符串可以不用分隔

'A'.charCodeAt() == 'A'.charCodeAt(0) == 'A121212'.charCodeAt(0) == '1A12'.charCodeAt(1)

以上就是我本人对这道题的思路以及解答,下面是源代码

let arr = ["B3","D2","F1","A9","D12","A2","C1","Z0","B1"]
     //先将数组按数字排列
    let arrOne = utilOne(arr)
    // 再将数组按数字类型排列
    let result = utilTwo(arrOne)
    console.log(result)

    //将数组按数字排列 
    function utilOne(arr){
        for(let i = 0;i< arr.length - 1;i++){
            for(let j = i + 1;j < arr.length;j++){
                let a = getNum(arr[i])
                let b = getNum(arr[j])
                if(a > b){
                    let temp = arr[i]
                    arr[i] = arr[j]
                    arr[j] = temp
                }
            }
        }
        return arr
    }
    //在数字相同的时候 把数字类型升序排列 
    function utilTwo(arr){
        for(let i = 0;i< arr.length - 1;i++){
            for(let j = i + 1;j < arr.length;j++){
                let a = arr[i].split('')[0]
                let b = arr[j].split('')[0]
                let aCode = parseInt(a.charCodeAt(0)) 
                let bCode = parseInt(b.charCodeAt(0)) 
                let aNum = getNum(arr[i])
                let bNUm = getNum(arr[j])
                // 在数字相同的时候 把数字类型升序排列
                if(aCode > bCode && aNum === bNUm){
                    let temp = arr[i]
                    arr[i] = arr[j]
                    arr[j] = temp
                }
            }
        }
        return arr
    }
    //将字符串中的数字取出 
    function getNum(value){
        return parseInt(value.replace(value.split('')[0],''))
    }

小子前端小白一个,欢迎各位大佬指点

posted @ 2024-06-22 00:03  前端小李子  阅读(10)  评论(0编辑  收藏  举报