- /**
- * @author wsf 数据分组,排序js
- */ 本文由上海java培训机构推荐阅读,更多精彩请移步上海it培训官网
- ;
- (function(win, $) {
- var _jsUtils = null;
- if(jsUtils)
- _jsUtils = new jsUtils();//js工具对象
- //分组排序对象
- function groupSorter() {
- //数据
- this.data = null;
- //排序方式
- this.sortType = [ 'asc', 'desc' ];
- //默认排序方法
- this.defaultsortType = this.sortType[0];
- //排序名称
- this.sorteName = null;
- //分组名称
- this.groupName = null;
- }
- //原型对象
- groupSorter.prototype = {
- //构造函数
- constructor : groupSorter,
- //所有操作前的数据检测
- dataCheck : function() {
- var _isAry = _jsUtils.isArray(this.data);//是否是数组
- var _isJSON = _jsUtils.isJSON(this.data[0]);//是否是json数组
- if (_isAry) {
- this.isAry = true;
- } else if (_isJSON) {
- this.isJSONAry = true;
- } else {
- throw new Error("数据有误!");
- }
- this.checked = true//已经做过数据检查
- },
- //线性查找
- lineSearch : function(key, val) {
- var i = this.data.length - 1;
- do {
- var _a = val?this.data[i--][val]:this.data[i--];
- var _b = val?this.data[key]:key;
- if (_a === _b)
- return i + 1;
- } while (i >= 0);
- return -1;
- },
- //二分查找 (必须为有序可比较数组)
- binarySearch : function(key, val) {
- var low = 0, high = this.data.length - 1;
- do {
- var mid = Math.floor((low + high) / 2);
- var mdata = val?this.data[mid][val]:this.data[mid]+"";
- key = val:this.data[key]:key+"";
- //向下取整数
- if (key === mdata)
- return val?this.data[mid]:mid;
- if (key.localeCompare(mdata) < 0)
- high = mid - 1;
- else
- low = mid + 1;
- } while (low <= high);
- return -1;
- },
- //原生js排序
- systemSorter:function (sortName){
- this.data.sort(function (a,b){
- var _a = sortName?a[sortName]:a+"";
- var _b = sortName?b[sortName]:b+"";
- var _f = this.sortType == "asc"?_a.localeCompare(_b):_b.localeCompare(_a);
- return _f;
- });
- },
- //冒泡排序(数据量小的时候用【数据量大时效率差】)
- bubbleSorter:function (sortName){
- var i = 0,arry = this.data,len = arry.length,j,d;
- for(;i<len;i++){
- for(j=0;j<len;j++){
- var d1 = sortName?array[i][sortName]:arry[i]+"";
- var d2 = sortName?array[j][sortName]:arry[j]+"";
- var _ret = this.sortType == "asc" ? d1.localeCompare(d2)<0:d1.localeCompare(d2)>0;
- if(_ret){
- d = arry[i];
- arry[j] = arry[i];
- arry[i] = d;
- }
- }
- }
- },
- //快速排序(效率最好)
- quickSort:function (sortName){
- var i = 0,arry = this.data,j=arry.length-1
- //排序实现
- var sorter = function (i,j){
- if(i==j){
- return;
- }
- var key = sortName?array[i][sortName]:arry[i];
- var stepi = i;//记录开始位置
- var stepj = j//记录结束位置
- while(j>i){
- var d1 = sortName?array[j][sortName]:arry[j]+"";
- key = key+"";
- if(d1.localeCompare(key)>=0){
- j--;
- }else{
- arry[i] = arry[j];
- while(j>i++){
- if(d1.localeCompare(key)>0){
- arry[j] = arry[i];
- break;
- }
- }
- }
- }
- //如果第一个取出的key是最小数
- if(stepi == i){
- soter(++i,stepj);
- return;
- }
- //最后一个空位留给key
- arry[i] = key;
- sorter(stepi,i);
- sorter(j,stepj);
- }
- sorter(i,j);
- }
- }
- win.groupSorter = groupSorter;//外部调用入口
- /**
- * 调用方式
- * var _sorter = new groupSorter();
- * _sorter.data = yourData;
- * _sorter.quickSort(sortName);
- */
- })(window,jQuery);
javascript 排序,分组小工具 - 支持JSON数组 原生数组
最新推荐文章于 2024-05-21 14:15:14 发布