业务需求
一组数据,根据不同的配置进行排序,比如拖拽或者其他形式得到动态的配置,如下的sortRule
实现
如:let dataSource= [{name:'aa',id:12,age:8,token:'inasd2',score:98,sex:0,address:'asdasdasd'}, {name:'bb',id:11,age:8,token:'inasd2',score:98,sex:0,address:'21r12'}, {name:'cc',id:12,age:8,token:'12fq2f',score:90,sex:1,address:'asd2rasdasd'}, {name:'dd',id:14,age:8,token:'gfj3',score:88,sex:1,address:'2r12r'}, {name:'dd',id:13,age:9,token:'2asd',score:78,sex:0,address:'2r2wf'}, {name:'ee',id:15,age:9,token:'tymh',score:68,sex:1,address:'sf4f4'}, {name:'ff',id:17,age:8,token:'5yhr',score:98,sex:0,address:'6hrj'}, {name:'gg',id:19,age:9,token:'z4y2',score:99,sex:0,address:'8kuk'}, {name:'hh',id:22,age:8,token:'vbdf6',score:100,sex:0,address:'mg66'}, {name:'hh',id:20,age:9,token:'58jt',score:99,sex:1,address:'87jgf'}, {name:'ii',id:18,age:8,token:'32ff',score:60,sex:0,address:'34geh'}];
let sortRule = [ {field:'name',direct:1}, {field:'id',direct:1}, {field:'age',direct:1}, {field:'token',direct:0}, {field:'score',direct:-1}, {field:'sex',direct:0}, {field:'address',direct:1}, ]
其中1代表升序,-1降序,0不排序,排序优先级根据sortRule的索引确定
//排序
function sort(){
let str = 'dataSource.sort((a,b)=>'
let strEnd = '0)'
sortRule.filter(item=> item.direct!== 0).forEach(sortItem=>{
let sortKey = sortItem.field
let direct= sortItem.direct
str+='a.'+sortKey+'>b.'+sortKey+'?'+direct+':a.'+sortKey+'<b.'+sortKey+'?'+(-direct)+':'
})
str+=strEnd
eval(str)
}
tips
以上是简单代码 用的是>,<进行比较大小,基本只支持字符串和数字
复杂的逻辑则需要自己写方法,然后替换上文中的< >为对应的函数拼接即可。
主要核心内容是eval方法。