要在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相关推荐

  1. 【学成在线】数据库结构 MongoDB+MySQL

    学成在线 QQ交流群:711637920,广告勿进 MongoDB: 1. xc_cms cms_config { "_id" : ObjectId("5a791725d ...

  2. 一款优秀的JavaScript框架—AngularJS

    AngularJS简介 AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.Angular ...

  3. java icomparer_集合数据处理(C#、JavaScript 和 Java)

    Java 丢了好多年,最近在拣起来,首先当然是了解这么多年来它的变化,于是发现了 Java 8 的java.util.stream.在学习和试验的过程中,相比较于 C# 和 javascript,有那 ...

  4. 给 C# 代码动态着色的 JavaScript 脚本

    给 C# 代码动态着色的 JavaScript 脚本     给 C# 代码动态着色的 JavaScript 脚本 脚本没有实现的功能: 没有给 "类.接口.结构.枚举.委托" 的 ...

  5. LINQ to JavaScript

    JSLINQ 是一个将LINQ对象转化为JavaScript对象的工具 .它是构建在JavaScript的数组对象的基础上进行转换的,如果您使用的是一个数组,你可以使用LINQ到javascript ...

  6. 使用ASP.NET Core,JavaScript,PostegreSql和ChartJs的动态仪表板Web应用程序

    目录 介绍 先决条件 创建项目架构 创建数据库 实现后端 一)创建DataAccess 1)创建实体和关系 2)设置数据库 3)创建存储库 II)实现应用逻辑 III)实现Web服务 IV)测试Web ...

  7. SuperMap iClient for JavaScript常见问题解答集锦(十二)

    作者:皇皇 问:如果您在OpenStack平台中创建虚拟机时出现以下错误信息Build of instance aborted: Flavor is disk is too small for req ...

  8. 常用JavaScript库

    1.前端工具类库 jQuery是一个快速.小型且功能丰富的 JavaScript 库,它使HTML文档遍历和操作.事件处理.动画和 AJAX 之类的事情变得更加简单.当时jQuery库不但简化了代码, ...

  9. ThinkPHP5.1.x SQL注入(orderby注入)

    ThinkPHP5.1.x SQL注入(orderby注入) 漏洞概要 初始配置 漏洞利用 漏洞分析 漏洞修复 攻击总结 漏洞概要 本次漏洞存在于 Builder 类的 parseOrder 方法中, ...

最新文章

  1. 数论计算机科学与技术专业就业前景好,【数学】数学专业就业前景:你看不见的“前途似锦”...
  2. HSRP多组基础配置实验
  3. 用计算机画函数图像教案,信息技术应用 用计算机画函数图象教案1
  4. 利用人体肤色从图像中分割出人体区域的OpenCV代码
  5. 6kyu Steps in k-prime
  6. navicat连接mysql报10061错
  7. ARC077E - guruguru(差分)
  8. 使用禅道Docker安装包安装
  9. Python笔记:0
  10. C#基础概念二十五问[转]
  11. 前端的魔爪已经伸到后端了,颤抖吧后端!
  12. 【Intellij】Intellij Idea 2017创建web项目及tomcat部署实战
  13. cad在线转换低版本_资源分享/CAD版本转换器
  14. 电商平台微服Dubbox实战,实现高并发抢购
  15. CC1310架构及工作原理
  16. Hadoop-day01_(java代码模拟hadoop存储数据)
  17. linux内核协议栈 TCP层数据发送之发送新数
  18. Lively Wallpaper 免费开源动画桌面壁纸,让您的桌面栩栩如生!
  19. JAVA应该怎么学?
  20. MathType 6.9 安装提示关闭软件再试一次

热门文章

  1. [Hadoop in China 2011] 何鹏:Hadoop在海量网页搜索中应用分析
  2. mysql的一个bug Block Nested Loop
  3. daterangepicker 使用方法总结
  4. 【Python】 Web开发框架的基本概念与开发的准备工作
  5. PCL点云库:Kd树
  6. [剑指Offer]12.二进制中1的个数
  7. 一句话评论设计模式六大原则--转
  8. Nexus如何上传自己的jar包 (upload artifactory)
  9. Intel X86 CPU系列的寄存器
  10. linkbutton控件中使用CommandName属性和CommandArgument属性