要求:
完成对数组对象,按照不同属性名,进行自定义排序
使用到的主要方法:
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就一直循环下去