分享js中的 sort 另一种用法

// 看上去正常的结果:
[‘Google‘, ‘Apple‘, ‘Microsoft‘].sort(); // [‘Apple‘, ‘Google‘, ‘Microsoft‘];

// apple排在了最后:
[‘Google‘, ‘apple‘, ‘Microsoft‘].sort(); // [‘Google‘, ‘Microsoft", ‘apple‘]

// 无法理解的结果:
[10, 20, 1, 2].sort(); // [1, 10, 2, 20]

  

要按数字大小排序,我们可以这么写:

var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
    if (x < y) {
        return -1;
    }
    if (x > y) {
        return 1;
    }
    return 0;
}); // [1, 2, 10, 20]
如果要倒序排序,我们可以把大的数放前面:

var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
    if (x < y) {
        return 1;
    }
    if (x > y) {
        return -1;
    }
    return 0;
}); // [20, 10, 2, 1]

  

默认情况下,对字符串排序,是按照ASCII的大小比较的,现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能定义出忽略大小写的比较算法就可以:

var arr = [‘Google‘, ‘apple‘, ‘Microsoft‘];
arr.sort(function (s1, s2) {
    x1 = s1.toUpperCase();
    x2 = s2.toUpperCase();
    if (x1 < x2) {
        return -1;
    }
    if (x1 > x2) {
        return 1;
    }
    return 0;
}); // [‘apple‘, ‘Google‘, ‘Microsoft‘]
忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较。

从上述例子可以看出,高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。

最后友情提示,sort()方法会直接对Array进行修改,它返回的结果仍是当前Array:

var a1 = [‘B‘, ‘A‘, ‘C‘];
var a2 = a1.sort();
a1; // [‘A‘, ‘B‘, ‘C‘]
a2; // [‘A‘, ‘B‘, ‘C‘]
a1 === a2; // true, a1和a2是同一对象

  

时间: 2024-08-04 00:19:13

分享js中的 sort 另一种用法的相关文章

Java中Array.sort()的几种用法

****************************************************** * 精品书籍推荐:<Java从入门到经通> * 本书系统全面.浅显易懂,非常适合没有任何编程经验的初学者阅读, * 也可作为软件开发人员和高校师生的必备参考书. ****************************************************** Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好

js中数组去重的几种方法

js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                         for(var i=0;i<arr.length;i++){                                 for(var j=i+1;j<arr.length;j++){                                         if(ar

好程序员Java学习路线分享JS中的面向对象

好程序员Java学习路线分享JS中的面向对象,在JS中,一般情况下我们都是直接写函数,直接调用,但是发现JS中也有new关键字,那么new关键字作为创建对象的关键字,给我们的感觉就是在JS中可以定义一个类,然后用new创建对象,那么在JS中如何做呢?我们先看如下案例,下面的案例是写一个简单的喷泉效果的. window.onload = function(){ // 创建一个画布对象var canvas = document.createElement("canvas");// 设置大小

好程序员web前端教程分享js中的模块化一

好程序员web前端教程分享js中的模块化一:我们知道最常见的模块化方案有CommonJS.AMD.CMD.ES6,AMD规范一般用于浏览器,异步的,因为模块加载是异步的,js解释是同步的,所以有时候导致依赖还没加载完毕,同步的代码运行结束:CommonJS规范一般用于服务端,同步的,因为在服务器端所有文件都存储在本地的硬盘上,传输速率快而且稳定. 1.script标签引入 最开始的时候,多个script标签引入js文件.但是,这种弊端也很明显,很多个js文件合并起来,也是相当于一个script,

JavaScript学习12 JS中定义对象的几种方式【转】

avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascript

JavaScript学习12 JS中定义对象的几种方式

JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascript"> var object = new Object(); object.name

[分享]Ubuntu 中设置源的几种方法

Ubuntu里的许多应用程序软件包,是放在网络里的服务器上,这些服务器网站,就称作“源”,从源里可以很方便地获取软件包, 下面的方法选一种即可,我们来看这个练习: 1.简单设置源 8)连接好网络后先换源,在左边的快速启动面板中点击“软件中心”按钮,再把鼠标移到最上边出现菜单栏,点“编辑-软件源”: 2)先出来一个密码输入框,输入自己密码后,点绿色“OK”按钮确定,进入源面板: 3)进入源面板后,把几个勾都打上,点击下面的下拉列表,选择 server for 中国(china),即中国的源: 4)

JS中事件绑定的三种方式

以下是搜集的在JS中事件绑定的三种方式. 1. HTML onclick attribute <button type="button" id="upload" onclick="upload_file();"> 原文: http://www.w3school.com.cn/jsref/jsref_events.asp 2. jQuery .on() $(node).on("change", function(e)

js中this指向的三种情况

js中this指向的几种情况一.全局作用域或者普通函数自执行中this指向全局对象window //全局作用域 console.log(this);//Window //普通函数 function fn(){ console.log(this); //Window } fn(); //函数加括号调用叫函数自执行,函数自执行时,内部的this指向顶层对象/window 二.事件函数内部的this指向事件源:注意在事件函数中如果包含普通函数,普通函数自执行后,内部this还是指向window //事