要求:

​ 完成对数组对象,按照不同属性名,进行自定义排序

​ 使用到的主要方法:

​ 1.Array.sort() 自定义排序的老大哥

​ 它会按照你给的准则(返回值为真的条件)帮你把数组排序好

​ Array.sort( b,a => {} ) //在sort里面,有两个参数,b是代表后面一位,a是代表前面一位

​ 返回值为真的就是它的排序准则

​ 2.value.charCodeAt(index) 粗暴的将对应位置的字符转换成数字编码

​ 注意:!!!!sort()是会更改原数组的!sort()是会更改原数组的!sort()是会更改原数组的!

基础的排序代码:

点击不同按钮触发不同方法从而执行不同的排序代码

    let listArry = [
        {name:"wuhu",age:"10"},
        {name:"Hi",age:"21"},
        {name:"M78",age:"16"}
    ]

    // 对数组对象中的name属性进行排序(因为写的要求b>a后面的大于前面,则就是升序)
    listArry.sort( (b,a) => b.name.charCodeAt(0) - a.name.charCodeAt(0) )

    // 对数组对象中的age属性进行排序(升序)
    listArry.sort( (b,a) => b.age - a.age )

动态属性的排序代码

有时候,我们动态收到数据,所以我们不能确定我们接下来要排序的列是哪一列,也就意味着我们不能写死我们排序的属性名,所以就用到了[]代替.

    let listArry = [
        {name:"wuhu",age:"10",...,...},
        {name:"Hi",age:"21",...,...},
        {name:"M78",age:"16",...,...}
    ]

    rank(key){
        listArry.sort( (b,a) => {
            b[key].charCodeAt(0) - b[key].charCodeAt(0)
        } )
    }

    //一般情况下,这样子就够用的,但是不包括遇到一些比较恶劣的情况,就是第一个位数是相同的,第二个位数不同,由于我们只对第一位进行判断,所以可能会有BUG导致排序错误,这个时候就得用if来写下去了- -

    比如:
    rank(key){
        listArry.sort( (b,a) => {
            //如果第一位相同,那么就判断第二位
            if( b[key].charCodeAt(0) == b[key].charCodeAt(0) ){
                return b[key].charCodeAt(1) - b[key].charCodeAt(1)
            }
            //没有进入if判断,就直接判断第一位即可了
            return b[key].charCodeAt(0) - b[key].charCodeAt(0)
        } )
    }

    //如果要做很多位一直判断下去直到不同的话,可以用for循环来,等到不同的时候标识字符为ture,不然一直都是false就一直循环下去