现有数据格式如下
let arr=
[
{
name:'1',
list:[
{val:'-0.2%'},
{val:'-0.1%'},
{val:'--'},
{val:'2021-04-04'},
{val:'0.53%'},
....
]
},
{
name:'2',
list:[
{val:'-0.14%'},
{val:'-0.1%'},
{val:'-0.45%'},
{val:'2021-01-05'},
{val:'0.53%'},
....
]
},
{
name:'3',
list:[
{val:'-0.45%'},
{val:'-0.1%'},
{val:'-0.45%'},
{val:'2021-02-01'},
{val:'0.53%'},
....
]
}
]
要求在排序的时候 需要以 arr[i].list[x].val来进行排序
1.如果数据有 -- 就放到最后
2.val数据格式不确定 但是就几种 带%号的string 可以转成float处理
日期格式 如果是日期格式那当前所有x的都是日期格式,不会x是日期 x+1却是%这种,但有可能是 -- 这种
数字格式 这种最好处理
其实用js数组自带的sort是能满足要求的,但是sort效率有点低,当arr数组长度很多的时候,会卡 放一下sort排序的方式,下面是没有包括日期的处理 排序
sort_list(index, orderby) {
console.log(index,orderby)
this.data_list_copy.sort(function (a, b) {
if(a.list[index].val == '--' || a.list[index].val == NaN){
return 1 ;
}
if(b.list[index].val == '--' || b.list[index].val == NaN){
return -1 ;
}
if (parseFloat(a.list[index].val) < parseFloat(b.list[index].val)) {
return orderby == "desc" ? 1 : -1;
} else if (parseFloat(a.list[index].val) > parseFloat(b.list[index].val)) {
return orderby == "desc" ? -1 : 1;
}
})
},
求大佬给一下 排序效率更高效的方式
使用
sort
即可, 数据排序前可以先预处理
,比如parseFloat
等操作,甚至,按想要的排序给每一个项生成一个专用的排序key
, 对key
进行排序即可