`
JavaSam
  • 浏览: 951728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript 排序,分组小工具 - 支持JSON数组 原生数组(学习,持续更新)

 
阅读更多
/**
 * @author wsf 数据分组,排序js
 */
;
(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);

 

 

0
2
分享到:
评论

相关推荐

    jquery下json数组的操作实现代码.docx

    本文档主要介绍了如何在jQuery环境下对JSON数组进行操作,涵盖数组的创建、元素的访问、添加、删除、截取、合并、拷贝、排序以及字符串化等常见操作。 #### 二、数组的创建 在jQuery中处理JSON数组时,首先需要创建...

    易语言-json_ksort 二维数组键值排序

    在易语言中,ksort并非针对JSON数据的原生函数,但我们可以利用它来实现JSON对象的键值排序。ksort函数按照键的顺序对数组进行排序,保持原有的键值对应关系,这对于处理有序的JSON数据至关重要。 实现二维数组键值...

    JSON数据两种排序例子

    一、原生JavaScript排序 1. **对象属性排序** JavaScript对象的属性顺序是不确定的,因为它们不是按照插入的顺序存储的。然而,如果你需要一个特定的顺序,可以先将JSON对象转换为数组,然后对数组进行排序。例如...

    Json的两种排序方法

    1. **原生JavaScript排序方法** 在JavaScript中,你可以直接对JSON对象的数组成员进行排序。假设我们有以下JSON数据: ```json { "data": [ {"name": "Tom", "age": 25}, {"name": "Jerry", "age": 30}, {...

    JSON字段属性从大到小排序

    例如,假设我们有以下JSON数组: ```json [ {"name": "item1", "clickIndex": 3}, {"name": "item2", "clickIndex": 1}, {"name": "item3", "clickIndex": 2} ] ``` 为了按照"clickIndex"字段的值从大到小排序...

    mysql_json_JPAmysqljson_mysqljsonjpa_MYSQL_mysql支持json_

    MySQL提供了丰富的JSON函数,如`JSON_EXTRACT`用于获取JSON对象的值,`JSON_INSERT`和`JSON_REPLACE`用于修改JSON文档,`JSON_ARRAY`和`JSON_OBJECT`用于创建JSON数组和对象等。这些函数使你在SQL查询中直接操作JSON...

    json包

    Json-lib支持多种Java类型到JSON的转换,如JavaBean、Map、Collection、数组等,同时也支持将JSON字符串解析为这些Java类型。它对于不支持原生JSON的JDK版本尤其有用。 3. `commons-lang-2.5.jar`:Apache Commons ...

    jQuery中json对象的复制方式介绍(数组及对象)

    数组的排序在原生JavaScript中可以使用sort方法,它接受一个比较函数,根据比较函数的返回值来决定元素的顺序。如果需要对对象数组进行排序,需要在比较函数中指定对象的哪个属性用于排序。例如: ```javascript ...

    JavaScript初学者应注意的七个细节小结

    标题中提到的知识点是"JavaScript初学者应注意的七个细节小结",这里说明了JavaScript初学者在学习这门语言时需要注意的一些关键细节,这些细节对于提高代码质量、优化代码结构、加深对JavaScript特性的理解至关重要...

    refj-array-master

    从项目名和标签“nodejs array”我们可以推断,这个项目可能是为了提供一系列增强或扩展JavaScript原生数组功能的工具或者模块。在Node.js环境中,由于JavaScript的特性,数组操作在处理大量数据时可能会遇到性能...

    js数组操作常用方法

    在使用jQuery处理JSON数组时,虽然jQuery提供了方便的遍历方法,但在添加或移除元素时,通常还是需要回溯到原生JavaScript的数组操作方法,因为这些操作在jQuery中并没有直接的对应方法。 对于JSON数据,虽然在DOM...

    JavaScript数组去重的几种方法

    有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛。 数组不像对象和hash有唯一的标志特征(key)。所以,...

    js原生systable表格插件.zip

    1. 数据渲染:能够将数据源(如JSON对象数组)转换为表格格式,动态加载和更新数据。 2. 排序与过滤:支持对表格列进行升序或降序排序,以及根据特定条件过滤数据。 3. 表格操作:提供行列的增删、合并,以及单元格...

    前端开源库-unordered-array-remove

    在JavaScript中,原生数组的`splice()`方法可以用来删除数组中的元素,但它的执行效率并不高,特别是在大型数组中,因为这会导致数组内部的所有元素都需要重新排序。"unordered-array-remove" 库提供了一个优化的...

    javascript数组去重方法终极总结

    本文重点讨论了JavaScript中数组去重的三种方法,并分析了每种方法的优缺点。数组去重是前端开发中常见的需求,尤其在处理用户输入、处理API数据等场景下,如何去除数组中重复的元素是一个经常遇到的问题。以下为三...

    wx-shop:原生微信小程序电商项目

    这里可能会用到JavaScript的数组操作和事件处理,以及微信小程序的API来获取和更新商品分类数据。 3. **购物车页面**:用户可以将商品添加到购物车,并在此页面管理购物车中的商品,如增减数量、选择规格、查看总价...

    ajax返回的json内容进行排序使用sort()方法实现

    在开发过程中,经常需要对通过Ajax技术从服务器获取的JSON数据进行处理和排序。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一...

    TreeGrid

    - TreeGrid的数据通常是一个嵌套的JSON对象数组,每个对象表示一个节点,包含ID、父ID、文本、子节点数组等属性。 - 数据结构的设计直接影响到TreeGrid的渲染效率和功能实现。 4. **功能实现**: - 展开/折叠:...

    仿携程首字母搜索城市按城市首字母城市选择JS特效代码

    可能包含以下几个部分:初始化城市数据(可能存储为JSON格式)、设置事件监听器、处理用户输入、排序城市列表以及更新UI显示。编写这部分代码时,需要注意性能优化,比如使用debounce或throttle函数防止频繁的搜索...

    30secondsofcode中文版翻译收集有用的Javascript片段你可以在30秒或更少的时间里理解

    3. **数组操作**:这些代码片段可以帮助你更有效地处理数组,如查找、排序、过滤、合并等。这对于处理集合数据至关重要。 4. **日期和时间处理**:JavaScript提供了对日期和时间的处理,但有时原生方法可能不够直观...

Global site tag (gtag.js) - Google Analytics