JS集合动态配置化排序

业务需求

一组数据,根据不同的配置进行排序,比如拖拽或者其他形式得到动态的配置,如下的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方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值