/** * @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);
相关推荐
本文档主要介绍了如何在jQuery环境下对JSON数组进行操作,涵盖数组的创建、元素的访问、添加、删除、截取、合并、拷贝、排序以及字符串化等常见操作。 #### 二、数组的创建 在jQuery中处理JSON数组时,首先需要创建...
在易语言中,ksort并非针对JSON数据的原生函数,但我们可以利用它来实现JSON对象的键值排序。ksort函数按照键的顺序对数组进行排序,保持原有的键值对应关系,这对于处理有序的JSON数据至关重要。 实现二维数组键值...
一、原生JavaScript排序 1. **对象属性排序** JavaScript对象的属性顺序是不确定的,因为它们不是按照插入的顺序存储的。然而,如果你需要一个特定的顺序,可以先将JSON对象转换为数组,然后对数组进行排序。例如...
1. **原生JavaScript排序方法** 在JavaScript中,你可以直接对JSON对象的数组成员进行排序。假设我们有以下JSON数据: ```json { "data": [ {"name": "Tom", "age": 25}, {"name": "Jerry", "age": 30}, {...
例如,假设我们有以下JSON数组: ```json [ {"name": "item1", "clickIndex": 3}, {"name": "item2", "clickIndex": 1}, {"name": "item3", "clickIndex": 2} ] ``` 为了按照"clickIndex"字段的值从大到小排序...
MySQL提供了丰富的JSON函数,如`JSON_EXTRACT`用于获取JSON对象的值,`JSON_INSERT`和`JSON_REPLACE`用于修改JSON文档,`JSON_ARRAY`和`JSON_OBJECT`用于创建JSON数组和对象等。这些函数使你在SQL查询中直接操作JSON...
Json-lib支持多种Java类型到JSON的转换,如JavaBean、Map、Collection、数组等,同时也支持将JSON字符串解析为这些Java类型。它对于不支持原生JSON的JDK版本尤其有用。 3. `commons-lang-2.5.jar`:Apache Commons ...
数组的排序在原生JavaScript中可以使用sort方法,它接受一个比较函数,根据比较函数的返回值来决定元素的顺序。如果需要对对象数组进行排序,需要在比较函数中指定对象的哪个属性用于排序。例如: ```javascript ...
标题中提到的知识点是"JavaScript初学者应注意的七个细节小结",这里说明了JavaScript初学者在学习这门语言时需要注意的一些关键细节,这些细节对于提高代码质量、优化代码结构、加深对JavaScript特性的理解至关重要...
从项目名和标签“nodejs array”我们可以推断,这个项目可能是为了提供一系列增强或扩展JavaScript原生数组功能的工具或者模块。在Node.js环境中,由于JavaScript的特性,数组操作在处理大量数据时可能会遇到性能...
在使用jQuery处理JSON数组时,虽然jQuery提供了方便的遍历方法,但在添加或移除元素时,通常还是需要回溯到原生JavaScript的数组操作方法,因为这些操作在jQuery中并没有直接的对应方法。 对于JSON数据,虽然在DOM...
有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛。 数组不像对象和hash有唯一的标志特征(key)。所以,...
1. 数据渲染:能够将数据源(如JSON对象数组)转换为表格格式,动态加载和更新数据。 2. 排序与过滤:支持对表格列进行升序或降序排序,以及根据特定条件过滤数据。 3. 表格操作:提供行列的增删、合并,以及单元格...
在JavaScript中,原生数组的`splice()`方法可以用来删除数组中的元素,但它的执行效率并不高,特别是在大型数组中,因为这会导致数组内部的所有元素都需要重新排序。"unordered-array-remove" 库提供了一个优化的...
本文重点讨论了JavaScript中数组去重的三种方法,并分析了每种方法的优缺点。数组去重是前端开发中常见的需求,尤其在处理用户输入、处理API数据等场景下,如何去除数组中重复的元素是一个经常遇到的问题。以下为三...
这里可能会用到JavaScript的数组操作和事件处理,以及微信小程序的API来获取和更新商品分类数据。 3. **购物车页面**:用户可以将商品添加到购物车,并在此页面管理购物车中的商品,如增减数量、选择规格、查看总价...
在开发过程中,经常需要对通过Ajax技术从服务器获取的JSON数据进行处理和排序。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一...
- TreeGrid的数据通常是一个嵌套的JSON对象数组,每个对象表示一个节点,包含ID、父ID、文本、子节点数组等属性。 - 数据结构的设计直接影响到TreeGrid的渲染效率和功能实现。 4. **功能实现**: - 展开/折叠:...
可能包含以下几个部分:初始化城市数据(可能存储为JSON格式)、设置事件监听器、处理用户输入、排序城市列表以及更新UI显示。编写这部分代码时,需要注意性能优化,比如使用debounce或throttle函数防止频繁的搜索...
3. **数组操作**:这些代码片段可以帮助你更有效地处理数组,如查找、排序、过滤、合并等。这对于处理集合数据至关重要。 4. **日期和时间处理**:JavaScript提供了对日期和时间的处理,但有时原生方法可能不够直观...