多条件排序

做项目有个产品需求;具体是要求根据优先级大小排序一遍,然后根据中文名排一遍,简单说就是二级排序了

 

var arrayData=[//测试数据
    {name:"佛山",priority:2},
    {name:"Wish邮_无锡",priority:1},
    {name:"腌面",priority:5},
    {name:"新加坡",priority:2},
    {name:"4PX测试",priority:2},
    {name:"a鸡扒",priority:5},
    {name:"菜鸟",priority:1},
    {name:"台湾",priority:1},
    {name:"肉末",priority:5},
    {name:"7斤",priority:5},
    {name:"6测试",priority:2},
    {name:"披萨",priority:5}
];

arrayData.sort(function (a,b) {//优先级排序一遍,因为需要从大排到小所以要reverse反序
  return a.priority - b.priority
}).reverse();

function chineseSort(array){//中文排序:数字》中文》英文
    return array.sort(function compareFunction(index1,index2) {
        return index1.name.localeCompare(index2.name,"zh");
    });
};

var cacheArr=[];//缓存数组
var sortArr=[];//最终排序好的数组
for (var i = 0,arrLen=arrayData.length; i < arrLen; i++) { if (i<arrLen-1) { var thisVal = arrayData[i].priority; var nextVal = arrayData[i+1].priority; if (thisVal==nextVal) { cacheArr.push(arrayData[i]) }else{ cacheArr.push(arrayData[i]) //cacheArr本身就是一个数组不能直接push添加,而要apply融合 sortArr.push.apply(sortArr,chineseSort(cacheArr)) cacheArr=[];//清空缓存数组 } }else{ cacheArr.push(arrayData[i]) sortArr.push.apply(sortArr,chineseSort(cacheArr)) } } console.log(sortArr)//结果

 

posted @ 2018-08-31 15:45  前端-大雄  阅读(1334)  评论(0编辑  收藏  举报