数组的排序

JavaScript可以实现多维数组,对象数组等排序,语法如下

arrayobj.sort(sortfunction) 参数
arrayObj  必选项。任意 Array 对象。
sortFunction   可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。
说明
sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。 如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一: 负值,如果所传递的第一个参数比第二个参数小。 零,如果两个参数相等。
正值,如果第一个参数比第二个参数大

不会创建新的Array对象即数组在原数组上进行排序,不生成副本。如果调用sort方法时没有使用参数,将按字母的顺序进行排序,即元素将按照 ASCII 字符顺序进行升序排列。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。
//数值排序
function SortNumByAsc(a ,b) {return a - b;
}
function SortNumByDesc(a, b) {return b - a;
}var nArr = new Array(8, -6, 9, 20, -3, 5, 18, 12);
nArr.sort(SortNumByAsc);console.info(nArr); //-6, -3, 5, 8, 9, 12, 18, 20
nArr.sort(SortNumByDesc);
console.info(nArr); //20, 18, 12, 9, 8, 5, -3, -6

sort(fun)接受了比较2个数值大小的函数,如果不比较数值的大小,如下

var phone = ["Apple", "Android", "WP7"];
phone.sort(); console.info(phone);  //"Android", "Apple", "WP7"

数组直接调用sort后,数组按字母的顺序对数组中的元素进行排序,但如果是一个JSON数组如下

  var person = [];person[0] = { name: "Irving",age: 22, hobby: "eat" };person[1] = { name: "Jimmy", age: 27, hobby: "read" };person[2] = { name: "Rain",  age: 18, hobby: "sleep" };

现要根据age的大小对person排序,同样需要构造个对象数组排序的函数,如下

//单键排序
function SortByTagName(name) {return function (o, p) {var a, b;if (typeof o === "object" && typeof p === "object" && o && p) {a = o[name];b = p[name];if (a === b) {return 0;}if (typeof a === typeof b) {return a < b ? -1 : 1;}return typeof a < typeof b ? -1 : 1;}else {throw ("error");}}
}

调用下吧

 var person = [{ name: "Irving", age: 22, hobby: "eat" },{ name: "Jimmy", age: 27, hobby: "read" },{ name: "Rain", age: 18, hobby: "sleep" }];person.sort(SortByTagName("age")); //根据age排序console.info(person[0]);   //{ name="Rain",  age=18,  hobby="sleep"}

这里,对象排序就基本实现了,那么可以实现像MSSQL中order by age ,name 一样排序吗,即先是对age排序,如果age相同,再比较name,必须可以,改造上述函数如下

//多键排序 (def可选参数)
function SortByTagName(name, def) {return function (o, p) {var a, b;if (o && p && typeof o === 'object' && typeof p === 'object') {a = o[name];b = p[name];if (a === b) {return typeof def === 'function' ? def(o, p) : 0;}if (typeof a === typeof b) {return a < b ? -1 : 1;}return typeof a < typeof b ? -1 : 1;} else {throw ("error");}}
}

调用

 person.sort(SortByTagName("age", SortByTagName("name"))); //,SortByTagName("name") 可选参数

运用上述方法就可以随便排序了,这里介绍个JQ插件 Jquery.tinysort ,

举个列子

<ul class="xmpl" id="xnum"><li>unrennef</li><li>eisuqjios</li><li>241</li><li>20.6</li><li>851</li><li>65.3</li>
</ul>

只需调用 即可实现对li中的数值排序

$('ul#xnum>li').tsort();

结果

<ul id="xnum" class="xmpl"><li>20.6</li><li>65.3</li><li>241</li><li>851</li><li>eisuqjios</li><li>unrennef</li>
</ul>

API:http://tinysort.sjeiti.com/

修订记录

2012年6月21日18:48:23 开篇   数组的排序

转载于:https://www.cnblogs.com/Irving/archive/2012/06/22/2558648.html

JavaScript基本知识相关推荐

  1. JavaScript编程知识

    JavaScript编程知识 1.从阵列中删除重复项 数组:这是一些方便的方法,可用于从数组中删除重复项. 1.使用lodash let array = [2, 1, 2, 5, 6, 7, 8, 9 ...

  2. JavaScript 基础知识 - BOM篇

    前言 本篇文章是JavaScript基础知识的BOM篇,如果前面的<JavaScript基础知识-DOM篇>看完了,现在就可以学习BOM了. 注意: 所有的案例都在这里链接: 提取密码密码 ...

  3. javascript date php date,JavaScript Date 知识浅析

    Date函数 new Date() Date 对象会自动把当前日期和时间保存为其初始值. date.getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). date.getDa ...

  4. js java用var_Java基础———JavaScript基础知识

    原标题:Java基础---JavaScript基础知识 JavaScript基础知识(1) Javascript的历史,Javascript是什么? JavaScript 诞生于 1995 年. 它当 ...

  5. JavaScript 基础知识 - DOM篇(二)

    7. 节点操作 7.1 节点的属性 节点分类: 标签节点 文本节点 属性节点 注释节点 节点常用的属性: nodeType:节点的类型 nodeName:节点名称 nodeValue:节点值 常见的节 ...

  6. javaweb(02) JavaScript基础知识

    javaweb(02): JavaScript基础知识 JavaScript简介 为什么出现JavaScript Javascript是什么 JavaScript和Java的关系? 就像卡巴斯基和巴基 ...

  7. Javascript基础知识之四(常用数组方法)

    一.MDN链接 Array - JavaScript | MDNJavaScript的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象.https://developer.moz ...

  8. JavaScript基础知识与脚本语言总结

    1 Aptana插件安装 1.Aptana插件安装 <1>Aptana是一个非常强大,开源,JavaScript-focused的AJAX开发IDE. <2>它的特点包括: J ...

  9. JavaScript 基础知识 - 入门篇(二)

    11. 函数 11.1 函数的基础知识 为什么会有函数? 在写代码的时候,有一些常用的代码需要书写很多次,如果直接复制粘贴的话,会造成大量的代码冗余: 函数可以封装一段重复的javascript代码, ...

  10. JavaScript 基础知识

    JavaScript 基础知识 文章目录 JavaScript 基础知识 @[toc] 一.JS的基本语法与结构 1.1 JavaScript 用法 1.2 JavaScript 输出 1.3 Jav ...

最新文章

  1. leetcode 202 快乐数
  2. android:inputtype有哪些类型,android:inputType参数类型说明
  3. Android在Java获取组件,在Java中解析HTML以获取Android应用
  4. android 设置 媒体服务器,第三讲:如何掌握媒体服务器的运行情况
  5. python 两点之间的距离_手把手教你HTML5实现根据LBS定位到商家两点之间距离多少...
  6. nssl1319-埃雷萨拉斯寻宝【SPFA,建图】
  7. 科学计算机二进制算法,计算机是怎么理解二进制的?
  8. NuGet是什么?理解与使用(下)
  9. 字节内部自动化测试培训资料,明年涨薪用得上
  10. Objective-C与Swift混编
  11. 使用RabbitMQ实现延迟任务
  12. plt.imshow与cv2.imshow显示颜色问题
  13. mysql 存储用户头像_微信授权后用户头像保存到服务器实现方法
  14. Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for th
  15. 小米官网首页(html+css+JavaScript)
  16. 美颜技术---引导滤波 Guided Filter
  17. 收藏学习测试论坛,网站
  18. ARP(地址解析协议)和RARP(逆地址解析协议)
  19. 一文带你了解什么是PACS系统源码
  20. Jetson Xavier CAN(11)

热门文章

  1. GCC 编译 C++ 程序分步骤流程(预处理 gcc -E、编译 gcc -S、汇编 gcc -c 和链接 gcc 以及 gcc -o 选项)
  2. hadoop 添加删除机器以及设置免密登录
  3. debian10 apache2使用ssl
  4. LeetCode简单题之寻找数组的中心下标
  5. NVIDIA GPU自动调度神经网络
  6. TensorFlow指定CPU和GPU方法
  7. 循环IRNNv2Layer实现
  8. GPU上如何优化卷积
  9. Nucleus SE RTOS初始化和启动
  10. 个性化排序的神经协同过滤