为了账号安全,请及时绑定邮箱和手机立即绑定

想找个最快找出以下结果JS算法

想找个最快找出以下结果JS算法

冉冉说 2019-04-27 22:16:19
如题:letresult=[{lxid:{name:'20路'}},{lzbd:{name:'5路'}},{ldfx:{name:'107路'}},{lwes:{name:'301路'}}]希望得到这样的结果:letresult=[{lxid:{name:'5路'}},{lzbd:{name:'20路'}},{ldfx:{name:'107路'}},{lwes:{name:'301路'}}]
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

快速排序算法:
functionquickSort(arr){
varnewArr=[];
if(arr.length<2){
returnarr;
}else{
varstandIndex=Math.floor(arr.length/2);
varstandNum,standNumObj=arr.splice(standIndex,1);
for(letkeyinstandNumObj){
for(let_keyinstandNumObj[key]){
standNum=standNumObj[key][_key].name;
}
}
standNum=Number(standNum.slice(0,standNum.search('路')))
varminArr=[],maxArr=[];
for(vari=0,len=arr.length;ifor(letkeyinarr[i]){
for(let_keyinarr[i][key]){
let_num=arr[i][key][_key];
if(Number(_num.slice(0,_num.search('路')))minArr.push(arr[i]);
}else{
maxArr.push(arr[i]);
}
}
}
}
newArr=quickSort(minArr).concat(standNumObj,quickSort(maxArr));
}
returnnewArr;
}
这里是基于将对象当中的数字截取出来,比较大小进行快排的,快排的原理就是选择一个基准值,也就是以上代码所定义的standNum。然后比较基准值的两边,添加到最小数组或者最大数组中,最后递归合并这些数组。我是根据我总结的文章算法入门中的快速排序算法来扩展的。在算法当中,选择中间值作为基准值的快速排序算法是最快的。
                            
查看完整回答
反对 回复 2019-04-27
?
MM们

TA贡献1886条经验 获得超2个赞

result.sort((a,b)=>a.name.replace('路')-b.name.replace('路'))
                            
查看完整回答
反对 回复 2019-04-27
  • 2 回答
  • 0 关注
  • 381 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信