js对数组排序

var list = [
    {sort:3,data:[{a:1,b:2},{a:11,b:12},{a:21,b:22}]},
    {sort:4,data:[{a:31,b:32},{a:41,b:42},{a:51,b:52}]},
    {sort:5,data:[{a:551,b:32},{a:551,b:42},{a:7771,b:52}]},
    {sort:4,data:[{a:31,b:32},{a:41,b:42},{a:51,b:52}]},
    {sort:1,data:[{a:61,b:26},{a:16,b:12},{a:26,b:26}]},
    {sort:2,data:[{a:13,b:27},{a:11,b:12},{a:255,b:22}]}
];
需求:list 需要通过sort来进行排序,有可能存在相同的sort

解决:
  1.思路:将list重构成map,sortkey,datavalue,ker=>value形式,代码如下:

    var menuMap = {};//排序好的map
    var menu,menuOrder,menuKey,max=0;

    for(var i=0;i<list.length;i++){
        menu = list[i]||{};
        menuOrder = menu.sort || 0;
        //找到最大菜单号
        if(menuOrder > max){
            max = menuOrder;
        }
        menuKey = "key"+menuOrder; //这边不直接用menuOrderkey,是因为menuOrder是数字,虽然没错,但是习惯key是字母
        if(!menuMap[menuKey]){
            menuMap[menuKey] = [];
        }
        menuMap[menuKey].push(menu);
    }

    此时,max是最大序号,menuMap行如{key1: Array(1), key2: Array(1), key9: Array(1), key0: Array(1), key5: Array(1), …}

    var retArr = [],tempArr;//返回排序好的数组
    for(var l=0;l<=max;l++){
        tempArr = menuMap["key"+l];
        if(tempArr){
            for(var m =0;m<tempArr.length;m++){
                retArr.push(tempArr[m]);
            }
        }
    }
    retArr  就是一个排序好的数组 [{…}, {…}, {…}, {…}, {…}]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值