js排序(二维数组/英文/中文)方法封装

在实际业务中,往往会碰到排序的问题,今天我就特地梳理下我常用到的几个小方法,放到公共util里能提高不少效率呢!

1.一维数组排序

(1)js原生sort

 

/*
 * @Name 数组排序
 * @Param 
 * list {array} 原始数组
 * mode {string} 默认asc升序 desc降序
 * @Author zhaopeng@xunlei.com
 */
function sortArray(list,mode='asc'){
	var compare = function(a,b){
        if (mode == 'asc'){
        	return a - b;
        }
        else if (mode == 'desc'){
        	return b - a;
        }
	};
	var res = list.sort(compare);
	return res;
}

var res = sortArray(arr,'desc')
console.log(JSON.stringify(res))

 

(2)快排

 

var count = 0
var arr = [85, 24, 63, 45, 17, 31, 96, 50]
function quickSort(arr){
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
	count ++
  return quickSort(left).concat([pivot], quickSort(right));
};

var resArr = quickSort(arr)
console.log('排了' + count + '次')
console.log(resArr)

2.二维数组排序

var arr = [  
	{'name' : 'abc','age' : 20},  
	{'name' : 'cde','age' : 19},  
	{'name' : 'dfc','age' : 25},  
	{'name' : 'bde','age' : 21}  
];

/*
 * @Name 数组按照某一项key值排序
 * @Param 
 * list {array} 原始数组
 * property {string} 需要排的属性
 * mode {string} 默认asc升序 desc降序
 * @Author zhaopeng@xunlei.com
 */
function sortArrayByProperty(list,property,mode='asc'){
	var compare = function(property){
	    return function(a,b){
	        var value1 = a[property];
	        var value2 = b[property];
	        if (mode == 'asc'){
	        	return value1 - value2;
	        }
	        else if (mode == 'desc'){
	        	return value2 - value1;
	        }
	    }
	};
	var res = list.sort(compare(property));
	return res;
}

var res = sortArrayByProperty(arr,'age','asc')
console.log(JSON.stringify(res))

3.字符串排序,按照首字母

 

(1)英文

 

var list = [{name: "bbb"},{name: "ddd"},{name: "aaa"}];
function stringSort(property){
    return function(a,b){
        var value1 = a[property].charCodeAt(0);
        var value2 = b[property].charCodeAt(0);
        return value1 - value2;
    }
}
console.log(JSON.stringify(list.sort(stringSort('name'))));

 

(2)中文

 

var list3 = [{loc: "武汉"},{loc: "北京"},{loc: "上海"},{loc: "天津"}];
function chineseCharacters(property){
    return function(a,b){
        var value1 = a[property].charAt(0);
        var value2 = b[property].charAt(0);
        return value1.localeCompare(value2);
    }
}
console.log(JSON.stringify(list3.sort(chineseCharacters('loc'))));

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值