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

如题:
let result = [{
    lxid: {
        name: '20路'
    }
}, {
    lzbd: {
        name: '5路'
    }
}, {
    ldfx: {
        name: '107路'
    }
}, {
    lwes: {
        name: '301路'
    }
}]

希望得到这样的结果:

let result = [{
    lxid: {
        name: '5路'
    }
}, {
    lzbd: {
        name: '20路'
    }
}, {
    ldfx: {
        name: '107路'
    }
}, {
    lwes: {
        name: '301路'
    }
}]
阅读 2k
2 个回答

快速排序算法:

    function quickSort(arr) {
        var newArr = [];
        if (arr.length < 2) {
            return arr;
        } else {
            var standIndex = Math.floor(arr.length / 2);
            var standNum, standNumObj = arr.splice(standIndex, 1);
            for (let key in standNumObj) {
                for (let _key in standNumObj[key]) {
                    standNum = standNumObj[key][_key].name;
                }
            }
            standNum = Number(standNum.slice(0, standNum.search('路')))
            var minArr = [], maxArr = [];
            for (var i = 0, len = arr.length; i < len; i++) {
                for (let key in arr[i]) {
                    for (let _key in arr[i][key]) {
                        let _num = arr[i][key][_key];
                        if (Number(_num.slice(0, _num.search('路'))) < standNum) {
                            minArr.push(arr[i]);
                        } else {
                            maxArr.push(arr[i]);
                        }
                    }
                }

            }
            newArr = quickSort(minArr).concat(standNumObj, quickSort(maxArr));
        }
        return newArr;
    }
    
    

这里是基于将对象当中的数字截取出来,比较大小进行快排的,快排的原理就是选择一个基准值,也就是以上代码所定义的standNum。然后比较基准值的两边,添加到最小数组或者最大数组中,最后递归合并这些数组。我是根据我总结的文章算法入门中的快速排序算法来扩展的。在算法当中,选择中间值作为基准值的快速排序算法是最快的。

result.sort((a, b) => a.name.replace('路') - b.name.replace('路'))

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏