要在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];
//处理value
var a = v1, b = v2;
var sortKey = condition.sortKey;
if (sortKey !== undefined) {
a = v1[sortKey];
b = v2[sortKey];
}
//区分 valueType
var 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 {
//打平手的话梯归比下一个,当有多个orderBy
conditionIndex++;
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在前就不要转 -1
return -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的)

Javascript OrderBy的更多相关文章

  1. 让C#可以像Javascript一样操作Json

    Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...

  2. LINQ查询操作符之Select、Where、OrderBy、OrderByDescending、GroupBy、Join、GroupJoin及其对应的查询语法

    介绍    ·Select - Select选择:延迟    ·Where - Where查询:延迟    ·OrderBy - 按指定表达式对集合正序排序:延迟    ·OrderByDescend ...

  3. AngularJS学习--- AngularJS中数据双向绑定(two-way data-binding) orderBy step4

    1.切换工作目录 git checkout step- #切换分支,切换到第4步 npm start #启动项目 2.代码 app/index.html Search: <input ng-mo ...

  4. 淡扯javascript编程思想

    一.面向对象-OOD   虽然js面向对象的编程思想已经老话常谈了,但了为了文章的完整性,我还是把它加了进来,尽量以不太一样的方式讲述(虽然也没什么卵不一样的). 1.面向对象,首先得有类的概念,没有 ...

  5. Javascript实现Linq查询方式

    Linq是.net平台一个重要的技术,全称Language Integrated Query.通过构建快速查询语句,可快速从数据库或集合中筛选数据集.以查询数据库相同的方式操作内存数据. 在ECMAS ...

  6. 对JavaScript对象数组按指定属性和排序方向进行排序

    引子 在以数据为中心的信息系统中,以表格形式展示数据是在常见不过的方式了.对数据进行排序是必不可少的功能.排序可以分为按单个字段排序和按多个字段不同排序方向排序.单字段排序局限性较大,不能满足用户对数 ...

  7. LINQ to JavaScript

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

  8. JAVASCRIPT实现XML分页

    为了方便用户查看大批量数据,我们会用到动态分页,因此分页功能是我们在网站上见过的最普遍也是最常用的一个功能模块了.而以往的信息分页都是连接到数据库的,每一次点击都必须要后台数据库的支持.这样不但服务器 ...

  9. .NET 3.5(5) - LINQ查询操作符之Select、Where、OrderBy、OrderByDescending

    .NET 3.5(5) - LINQ查询操作符之Select.Where.OrderBy.OrderByDescending 介绍    ·Select - Select选择:延迟    ·Where ...

随机推荐

  1. python成长笔记

    正则表达式 1.    择一匹配:管道符号(|),表示“从多个模式中选择其一”.例:at|home à at.home 2.    点号匹配除了换行符以外的任何字符 3.    边界匹配:\b匹配一个 ...

  2. Unity3D NGUI UIPlayTween控件(一)动态打开关闭窗口

    利用NGUI自带的脚本控件实现按钮点击窗口滑动出现与隐藏. 创建界面 首先建立如下图的三个BUtton与三个Panel 绑定脚本 然后在每个Button上添加UIPlayTween脚本,在Intera ...

  3. [Typescript] Introduction to Generics in Typescript

    If Typescript is the first language in which you've encountered generics, the concept can be quite d ...

  4. Cocos2d-x 3.x 头像选择,本地相册图片+图片编辑(Android、IOS双平台)

    大连游戏产业不是很发达,最后,选择一个应用程序外包公司.积累的工作和学习过程中的一点业余生活微信体验,我想分享的游戏小朋友的爱. 在应用开发过程中会经常实用户上传头像的功能,在网上找了N多资料发现没有 ...

  5. RSA加密解密及数字签名Java实现--转

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...

  6. Linux设备驱动中的阻塞和非阻塞I/O

    [基本概念] 1.阻塞 阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件后再进行操作.被挂起的进程进入休眠状态(不占用cpu资源),从调度器的运行队列转移到等待队列,直到 ...

  7. 使用rpm安装mysql的默认目录

    --使用rpm安装mysql的默认目录:1.数据库目录/var/lib/mysql/2.配置文件/usr/share/mysql(mysql.server命令及配置文件)3.相关命令/usr/bin( ...

  8. Visual Studio 2013如何破解(密钥激活)

    其实有个方法最简单,就是点击“帮助”,选择注册产品,点击打开页面右下边的“使用秘钥注册产品”,输入上述秘钥即可.   在输入密钥界面,输入密钥“BWG7X-J98B3-W34RT-33B3R-JVYW ...

  9. rest简单实例

    http://www.cnblogs.com/fredric/archive/2012/03/03/2378680.html http://www.thinksaas.cn/topics/0/153/ ...

  10. WAJUEJI which home strong!

    算法:搜索+优先队列 描述 在一个山沟里,姐弟俩同时考上了大学.但由于家里拮据,所以这并不是什么好消息.父亲对孩子说:我就是砸锅卖铁也要把你们姐俩供出来. 当时的姐姐已经决定放弃上学的机会. 没想到第 ...