Javascript OrderBy
要在js 实现orderBy
基本知识就是 array.sort
array.sort(function(a,b){
a 表示 row 0
b 表示 row 1
它会loop多次
你可以比较 if(a > b) return 1
做出一个return , return 的结果 >0 代表你要这2个row对换位置
})
要实现orderBy呢
逻辑就是在比较的时候如果出现一样值,你要拿接下来的column做对比,直到完结!是一种梯归手法
if(a > b) return 1
else (a < b) return -1
else
{
平手
var a = row1["color"] //换下一个column的值对比
var b = row2["color"]
if(a > b) return 1
else if ..
else ...
又平手再循环...
}
sort 是游览器自带的功能。它的sort法法我不知道,排序本来就有很多很多种方法。(但可以支持上面的思想!这样很不错)。
一般我们对orderBy的思想可能是先sort 第一次,然后把相同的分层多个part ,在每个层sort 一次,一直这样循环 。 这其实是错误的。
在第一次loop时就要把逻辑给进去。一次sort 完成就可以了。
下面上一段代码,基本上可以用,只是要修改一些基本函数的依赖。
//orderBy array是引用哦Array.prototype.orderBy = function (conditionList) {conditionList = facade_(conditionList);//一个外观处理//上层调用://array.orderBy()顺序(not support value object|array)//array.orderBy("-")逆序(not support value object|array)//array.orderBy("code,-color,size") - 代表desc code代表attr (not support 有2中valueType的)//array.orderBy("0,-1,2") 0代表 array index (not support 有2中valueType的)function facade_(para) {//如果para 完全没有if (para === undefined) {return [{}]; //顺序,只能处理 value not array|object }else if (G.isString(para)) {var split = para.split(",");var conditionList = [];split.forEach(function (value) {var condition = {};var firstChar = value.charAt(0);if (firstChar === "-") {condition.numberSort = "desc";value = value.substring(1);}if (value != "") {if (G.canBeNumber(value)) {value = +value;}condition.sortKey = value; //试图转去number }conditionList.push(condition);});return conditionList;}}//API : 调用//var result = array.orderBy([{ sortKey, numberFirst, numberSort, otherSort }]) 只区分是number or not number//sortKey : attr 或者 array的i , 没有代表value不是array|object //numberFirst : true|false, default 是true , 当value有不同类型,时候number排在前面//numberSort : "desc"|"" default 是 "" 如果要desc,这是必填!//otherSort : "desc"|"" default 是 "" , 如果只有一种类型,那么就只用numberSort就可以了//逻辑规则,length = 0 error//value 是对象或array就一定有 conditionList[0].sortKey//value 是对象或array, 结构一定要一样,比如长短或attr //精华 : //array.sort(function(a,b){}) //a,b 代表row //return > 0 代表要转 var loop = function (v1, v2, conditionList, conditionIndex) {var result;var condition = conditionList[conditionIndex];//处理valuevar a = v1, b = v2;var sortKey = condition.sortKey;if (sortKey !== undefined) {a = v1[sortKey];b = v2[sortKey];}//区分 valueTypevar typeA = G.s.fn.myTypeOf(a);var typeB = G.s.fn.myTypeOf(b);if (typeA === typeB) {result = (condition.numberSort === undefined || condition.numberSort !== "desc") ? 1 : -1; //这个是给number的if (typeA !== "number" && condition.otherSort !== undefined) {result = (condition.otherSort !== "desc") ? 1 : -1;}if (a > b) {return result; //return 1 代表转 }else if (a < b) {return -result;}else {//打平手的话梯归比下一个,当有多个orderByconditionIndex++;if (conditionList[conditionIndex] !== undefined) {return loop(v1, v2, conditionList, conditionIndex); //梯归 }else {return 0;}}}else {//类型不同不能比,就看number要不要去前面就好result = (condition.is_numberFirst === undefined || condition.is_numberFirst === true) ? -1 : 1;if (typeA === "number") return result; //a 是number , 如果你要number在前就不要转 -1return -result;}};this.sort(function (v1, v2) {return loop(v1, v2, conditionList, 0);});return this;};
简单的可以这样调用 :
array.orderBy()顺序(not support value object|array) array.orderBy("-")逆序(not support value object|array) array.orderBy("code,-color,size") - 代表desc code代表attr (not support 有2中valueType的) array.orderBy("0,-1,2") 0代表 array index (not support 有2中valueType的)
转载于:https://www.cnblogs.com/keatkeat/p/3896493.html
Javascript OrderBy相关推荐
- 【学成在线】数据库结构 MongoDB+MySQL
学成在线 QQ交流群:711637920,广告勿进 MongoDB: 1. xc_cms cms_config { "_id" : ObjectId("5a791725d ...
- 一款优秀的JavaScript框架—AngularJS
AngularJS简介 AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.Angular ...
- java icomparer_集合数据处理(C#、JavaScript 和 Java)
Java 丢了好多年,最近在拣起来,首先当然是了解这么多年来它的变化,于是发现了 Java 8 的java.util.stream.在学习和试验的过程中,相比较于 C# 和 javascript,有那 ...
- 给 C# 代码动态着色的 JavaScript 脚本
给 C# 代码动态着色的 JavaScript 脚本 给 C# 代码动态着色的 JavaScript 脚本 脚本没有实现的功能: 没有给 "类.接口.结构.枚举.委托" 的 ...
- LINQ to JavaScript
JSLINQ 是一个将LINQ对象转化为JavaScript对象的工具 .它是构建在JavaScript的数组对象的基础上进行转换的,如果您使用的是一个数组,你可以使用LINQ到javascript ...
- 使用ASP.NET Core,JavaScript,PostegreSql和ChartJs的动态仪表板Web应用程序
目录 介绍 先决条件 创建项目架构 创建数据库 实现后端 一)创建DataAccess 1)创建实体和关系 2)设置数据库 3)创建存储库 II)实现应用逻辑 III)实现Web服务 IV)测试Web ...
- SuperMap iClient for JavaScript常见问题解答集锦(十二)
作者:皇皇 问:如果您在OpenStack平台中创建虚拟机时出现以下错误信息Build of instance aborted: Flavor is disk is too small for req ...
- 常用JavaScript库
1.前端工具类库 jQuery是一个快速.小型且功能丰富的 JavaScript 库,它使HTML文档遍历和操作.事件处理.动画和 AJAX 之类的事情变得更加简单.当时jQuery库不但简化了代码, ...
- ThinkPHP5.1.x SQL注入(orderby注入)
ThinkPHP5.1.x SQL注入(orderby注入) 漏洞概要 初始配置 漏洞利用 漏洞分析 漏洞修复 攻击总结 漏洞概要 本次漏洞存在于 Builder 类的 parseOrder 方法中, ...
最新文章
- 数论计算机科学与技术专业就业前景好,【数学】数学专业就业前景:你看不见的“前途似锦”...
- HSRP多组基础配置实验
- 用计算机画函数图像教案,信息技术应用 用计算机画函数图象教案1
- 利用人体肤色从图像中分割出人体区域的OpenCV代码
- 6kyu Steps in k-prime
- navicat连接mysql报10061错
- ARC077E - guruguru(差分)
- 使用禅道Docker安装包安装
- Python笔记:0
- C#基础概念二十五问[转]
- 前端的魔爪已经伸到后端了,颤抖吧后端!
- 【Intellij】Intellij Idea 2017创建web项目及tomcat部署实战
- cad在线转换低版本_资源分享/CAD版本转换器
- 电商平台微服Dubbox实战,实现高并发抢购
- CC1310架构及工作原理
- Hadoop-day01_(java代码模拟hadoop存储数据)
- linux内核协议栈 TCP层数据发送之发送新数
- Lively Wallpaper 免费开源动画桌面壁纸,让您的桌面栩栩如生!
- JAVA应该怎么学?
- MathType 6.9 安装提示关闭软件再试一次
热门文章
- [Hadoop in China 2011] 何鹏:Hadoop在海量网页搜索中应用分析
- mysql的一个bug Block Nested Loop
- daterangepicker 使用方法总结
- 【Python】 Web开发框架的基本概念与开发的准备工作
- PCL点云库:Kd树
- [剑指Offer]12.二进制中1的个数
- 一句话评论设计模式六大原则--转
- Nexus如何上传自己的jar包 (upload artifactory)
- Intel X86 CPU系列的寄存器
- linkbutton控件中使用CommandName属性和CommandArgument属性